内容提供器——创建自己的内容提供器

URI的格式:
(1)content://comple.app.provider/table:期望访问com.example.app应用中table表中数据。
(2)content://comple.app.provider/table/1:期望访问com.example.app应用中table表中id为1的数据。
通配符:
(1)*:匹配任意长度的任意字符。
(2)#:匹配任意长度的数字。

UriMatcher类——匹配内容Uri功能

  • addURI()方法:参数:authority、path、自定义代码。
  • match()方法:参数:Uri对象,返回值:该对象对应的自定义代码。

创建内容提供器:

  1. 新建一个类MyProvider去继承ContentProvider类。

ContentProvider的六个抽象方法

  • onCreat():初始化内容提供器时调用,在这里完成对数据库的创建和升级。
  • query():从内容提供器中查询数据,查询结果存Cursor对象中返回。
  • insert():添加一条数据。参数:uri—表,values—待添加数据。返回一个URI。
  • update():更新数据。返回值:受影响行数。
  • delect():删除数据。返回值:被删除的行数。
  • getType():根据传入内容的URI返回相应的MIME类型。

抽象方法的使用:
(1)query()、insert()、update()、delete()这四种方法的实现类似,以query()方法为例,代码如下:

    public final static int TABLE1_DIR = 0;
    public final static int TABLE1_ITEM= 1;
    public final static int TABLE2_DIR = 2;
    public final static int TABLE2_ITEM= 3;
    private 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[] strings, String s, String[] strings1, String s1) {
        switch (uriMatcher.match(uri)){
            case TABLE1_DIR:
                //查询table1表中所有数据
                break;
            case TABLE1_ITEM:
                //查询table1表中单条数据
                break;
            case TABLE2_DIR:
                //查询table2表中所有数据
                break;
            case TABLE2_ITEM:
                //查询table2表中单条数据
                break;
            default:break;
        }
        return null;
    }

(2)getType()方法:一个内容的URI对应的MIME字符由三部分组成

  • 必须以vnd开头。
  • URI以路径结尾,后接android.cursor.dir/;URI以id结尾,后接android.cuosor.item/。
  • 最后接上vnd.<authority>.<path>
@Override
    public String getType( Uri uri) {
        switch (uriMatcher.match(uri)){
            case TABLE1_DIR:
                return "vnd.android.cursor.dir/vnd.com.example.app.provider.table1";
            case TABLE1_ITEM:
                return "vnd.android.cursor.item/vnd.com.example.app.provider.table1/#";
            case TABLE2_DIR:
                return "vnd.android.cursor.dir/vnd.com.example.app.provider.table2";
            case TABLE2_ITEM:
                return "vnd.android.cursor.item/vnd.com.example.app.provider.table2";
            default:break;
        }
        return null;
    }

此时,内容提供器创建完成!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值