创建自己的内容提供器

1.创建自己的内容提供器

 新建MyProvider类继承ContentProvider:
  New---Other---ContentProvider

public class MyProvider extends ContentProvider {
    public MyProvider() {
        
    }

    @Override
    public boolean onCreate() {
        //初始化内容提供器的时候调用。
        // 通常会在这里完成对数据库的创建和升级等操作
        //返回true表示内容提供器初始化成功,false表示失败
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        //返回查询结果
        return null;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        //根据传入的内容URI来返回相应的MIME类型
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        //添加完成后,返回一个用于表示这条新记录的URI
        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;
    }
}

 以query()方法为例。在query方法中,根据传入的内容URI,来匹配期望调用的表以及表中的数据。根据不同的数据,编写不同的方法

内容URI主要分为两种:
 以路径结尾表示期望访问表中的所有数据:content://com.futuring.app.sharedata/table
 以id(主键)结尾表示访问该表中拥有相应id的数据:content://com.futuring.app.sharedata/table/1

 可以使用通配符的方式来分别匹配这两种格式的内容URI
 一个能够匹配任意表的内容URI格式可以写成:content://com.futuring.app.sharedata/ *
 一个能匹配table表中任意一行数据的内容URI格式可以写成:
content://com.futuring.app.sharedata/table/#

 接着利用UriMatcher这个类来实现匹配内容URI的功能。UriMatcher中提供了一个addURI()方法,分别接收内容URI的authoritypath,还有一个自定义代码
 当调用UriMatcher的match()方法时,传入一个Uri对象返回值是可以与之匹配的自定义代码,利用这个自定义代码,就可以判断出调用哪张表中的数据


getType()方法用于获取Uri对象所对应的MIME类型。一个内容URI所对应的MIME主要由3部分组成

  1. 必须以vnd开头
  2. 如果内容URI以路径结尾,则后接android.cursor.dir/;如果以id结尾,则后接android.cursor.item/
  3. 最后接上vnd..

 所以对于content://com.futuring.app.sharedata/table这个内容URI对应的MIME类型:vnd.android.cursor.dir/vnd.com.futuring.app.sharedata.table
 对于content://com.futuring.app.sharedata/table/1这个内容URI对应的MIME类型:vnd.android.cursor.item/vnd.com.futuring.app.sharedata.table

你可能感兴趣的:(创建自己的内容提供器)