第一行代码Android 第七章7.4 (通过新建一个类去继承ContentProvider的方式来创建一个自己的内容提供器)

7.4 创建自己的内容提供器
7.4.1 创建内容提供器的步骤
      想要实现跨程序共享数据的功能,官方推荐的方式就是使用内容提供器,可以通过新建一个类去继承ContentProvider的方式来创建一个自己的内容提供器。
      ContentProvider类中有六个抽象方法,我们在使用子类继承它的时候,需要重写这六个方法。

//新建MyProvider继承自ContentProvider
public class MyProvider extends ContentProvider {
    @Override
    //初始化内容提供器的时候调用
    public boolean onCreate() { 
        return false;
    }
    @Override
    //从内容提供器中查询数据
    public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) {
        return null;
    }
    @Override
    public Uri insert(Uri uri,ContentValues values) {
        return null;
    }
    @Override
    public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs) {
        return 0;
    }
    @Override
    public int delete(Uri uri,String selection,String[] selectionArgs) {
        return 0;
    }
    @Override
    //根据传入的内容Uri来返回响应的MIME类型(MIME类型下面介绍)
    public String getType(Uri uri) {
        return null;
    }
}

注意:MIME类型

一个内容URI所对应的MIME字符串主要由3部分组成:
1)必须以vnd开头
2)如果内容URI以路径为结尾,则在vnd后接android.cursor.dir/
      如果以id为结尾,则在vnd后接android.cursor.item/
3)最后接上vnd.<authority>.<path>

例:对于content://com.example.app.provider/table1,它所对应的MIME类型为:
              vnd.android.cursor.dir/vnd.com.example.app.provider.table1
例:对于content://com.example.app.provider/table1/1,它所对应的的MIME类型为:
              vnd.android.cursor.item/vnd.com.example.app.provider.table1

 注意:*表示匹配任意长度的任意字符,#表示匹配任意长度的数字

//继续修改MyProvider中的代码
//我们借助UriMatcher这个类就可以轻松的实现匹配内容URI的功能。UriMatcher中提供了一个addURI()方法
//它接收三个参数:authority,path,一个自定义的代码
//当调用UriMatcher的match方法时,就可以将一个Uri对象传入,返回值是某个能匹配这个Uri对象所对应的自定义代码
//利用这个返回的自定义代码可以判断出调用方期望访问的是哪一张表的中的数据了
public class MyProvider extends ContentProvider {
    public static final int TABLE1_DIR = 0;
    public static final int TABLE1_ITEM = 1;
    public static final int TABLE2_DIR = 2;
    public static final int TABLE2_ITEM = 3;
    public static UriMatcher uriMatcher;
    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI("com.example.app.provider","table1",TABLE1_DIR);
        uriMatcher.addURI("com.example.app.provider","table1/#",TABLE1_ITEM); 
        uriMatcher.addURI("com.example.app.provider","table2",TABLE2_DIR);
        uriMatcher.addURI("com.example.app.provider","table2/#",TABLE2_ITEM);
    }
    ...
    @Override
    public Cursor query(Uri uri, String[] projection,String selection,String[] selectionArgs,String sortOrder) {
        switch(uriMatcher.match(uri)) {
            case TABLE1_DIR:
                //查询table1表中的所有数据
                break;
            case TABLE1_ITEM:
                //查询table11表中的单条数据
                break;
            ...
        }
        return null;
    }
    @Override
    public String getType(Uri uri) {
        switch(uriM
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值