摸鱼日记09/18 day9 Android基础---ContentProvider

啥是ContentProvider

内容提供者(Content Provider)主要用于在不同的应用之间实现数据共享的功能,他提供了一整套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。目前内容提供者是Android实现跨平台共享数据的标准方式。
在这里插入图片描述

在这里插入图片描述

  1. ContentProvider=中间者角色(搬运工),真正存储&操作数据的数据源还是原来存储数据的方式(数据库、文件、xml或者网络)
    不同于文件存储和SharedPreferences存储中的两种全局可读可写操作模式,内容提供者可以选择只对那一部分内容进行共享,从而保证程序的隐私数据不会泄露的风险。
    在这里插入图片描述
    uri:指定查询某一个程序的某一张表
    projection:指定查询的列名
    selection:指定查询条件,相当于sql语句中的where后面的条件
    selectionArgs:给selection中的占位符提供具体的值
    orderBy:指定查询结果排序方式
    cancellationSignal:取消正在操作的信号量

想要访问内容提供者中共享的数据,就一定要借助ContentResolver类,可以通过Context中的getContentResolver()的方法获取的该类的实例,ContentResolver中提供了一系列的方法用于对数据进行CRUD(增删改查)的操作,其中insert()方法用于添加数据,update()方法用于数据的更新
和SQLite数据库差不多。
但是不同于SQLiteDatabase,ContentResolver中的增删改查方法都是不接受表明参数的,而是使用一个uri参数替代,这个参数被称为内容URI。内容URI给内容提供者中的数据建立了唯一的标识符,主要由两个部分组成:authority和path。authority是用于对不同的应用程序做区分,一般为了避免冲突,都会采用程序包命名的方式来命名。比如某个程序包名为com.example.app,那就写成com.example.app.provider。path则是用来对同一应用程序中不同的表做区分,通常都会加在authority的后面。

创建自己的ContentProvider

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * 大便提供者,主职:提供大便
 */
public class ShitProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        /**
         * onCreate()方法:
         * 初始化内容提供器的时候调用。通常会在这里完成对数据库的创建和升级等操作。返回true表示内容提供者初始化成功,返回false则表示失败。
         * 只有当存在ContentResolver尝试访问我们的程序中的数据时,内容才会被初始化
         */
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        /**
         * 从内容提供者中查询数据,使用的uri参数来确定查询的哪张表,projection参数用于确定查询哪一个列
         * selection和selectionArgs参数用于约束查询哪些行
         * sortOrder参数用来对结果进行排序,查询的结果存放在Cursor对象中返回
         */
        return null;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        /**
         * 
         */
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }
}


在这里插入图片描述

统一资源表示符uri

  1. 定义:Uniform Resource Identifier,统一资源标识符(URI)
  2. 作用:统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。唯一标识Contentprovider其中的数据
  3. 具体使用:URI分为系统预置和自定义,分别对应了如通讯录、日程表和自定义数据库

MIME数据类型

定义: 多功能邮件扩充服务,MIME类型就是定义了某种扩展名的文件用一种应用程序来打开的方式,就像发送的word用office打开一样,多用于指定一些客户端自定义的文件名。
作用:指定某个扩展名的文件用某种应用程序来打开。

ContentProvider

数据组织方式:ContentProvider主要以表格的方式组织数据,每个表格包含列和行,分别对应记录和字段
主要方法:进程间共享数据的本质是:添加、删除和获取修改数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值