【Android基础】数据存储之ContentProvider


ContentProvider是Android的四大组件之一
主要用于在不同的应用程序之间实现数据共享的功能

一、相关介绍

1、URI(通用资源标识符 Universal Resource Identifer)

作用:代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。
它主要由两部分组成:authority和path。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。path则是用于对同一应用程序中不同的表做区分的,通常都会添加到authority的后面。
一个完整的URI写法为:

content://com.example.app.provider/table1
//这就表示调用方期望访问的是com.example.app这个应用的table1表中id为1的数据。
content://com.example.app.provider/table1/1

内容URI的格式主要有以上两种。
以路径结尾就表示期望访问该表中所有的数据;以id结尾就表示期望访问该表中拥有相应id的数据。
可以使用通配符的方式来分别匹配这两种格式的内容URI,规则如下。

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

2、MIME数据类型

作用:指定某个扩展名的文件用某种应用程序来打开.
一个内容URI所对应的MIME字符串主要由3部分组成,Android对这3个部分做了如下格式规定。

1、必须以vnd开头
2、如果内容URI以路径结尾,则后接android.cursor.dir/;如果内容URI以id结尾,则后接android.cursor.item/
3、最后接上<authority>.<path>
如:
//
"vnd.android.cursor.dir/com.android.contentprovidertest.books"

3、UriMatcher

作用
1)在ContentProvider 中注册URI
2)根据 URI 匹配 ContentProvider 中对应的数据表

    //步骤一:创建UriMatcher对象
    private static UriMatcher uriMatcher;

    //步骤二:在ContentProvider中注册URI
    //匹配成功后的匹配码
    private static final int MATCH_CODE = 100;
    private static final int MATCH_CODE_ID = 200;

    //步骤三:创建静态代码块
    static {
   
        //实例化UriMatcher对象
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //可以实现匹配URI的功能
        //参数1:authority 参数2:路径 参数3:URI与给定组件匹配成功后的匹配码
        uriMatcher.addURI(AUTHORITY, "books", MATCH_CODE);
        uriMatcher.addURI(AUTHORITY, "books/#", MATCH_CODE_ID);
    }
    //步骤四:根据URI匹配CODE,从而匹配ContentProvider中相应的资源
    @Override
    public String getType(Uri uri) {
   
        // at the given URI.
        int match = uriMatcher.match(uri);
        switch (match) {
   
            case MATCH_CODE:
                Log.d("text", "getType: MATCH_CODE");
                return BOOKS_TYPE;
            case MATCH_CODE_ID:
                Log.d("text", "getType: MATCH_CODE_ID");
                return BOOKS_TYPE_ID;
            default:
                Log.d("text", "getType: default");
                return null;
        }
    }

4、ContentProvider

1)主要方法
// ContentProvider创建后或打开系统后其它进程第一次访问该ContentProvider时由系统进行调用<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值