Android 中你所需要了解掌握的--四大组件之ContentProvider详解

一、什么是ContentProvider

ContentProvider应用场景:

  • 为了应用程序之间交换数据,Android提供了ContentProvider,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可以通过提供ContentProvider来实现。
  • 比如现在有一个短信接收应用,用户想把接收到的陌生短信的发信人添加到联系人管理应用中,就需要在不同应用之间去共享数据,这时,也可操作它所记录的SharedPreference、文件或者数据库等,这种方式不仅麻烦,而且存在安全漏洞。因此Android 4.2不再推荐使用这种方式,而是推荐使用ContentProvider。

ContentProvider是不同应用程序之间进行数据交换的标准API,它以某种Uri的形式来对外提供数据,允许其他应用访问或者修改数据。而其他应用程序使用ContentResolver来根据Uri去访问或者操作指定的数据。

那么如何完整的开发一个ContentProvider呢:

  • 定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类。
  • 向Android系统注册这个ContentProvider,也就是在AndroidManifest.xml文件中注册这个ContentProvider,就像注册Activity一样,注册ContentProvider时需要为他绑定一个Uri。
     <!-- 下面配置中name属性指定ContentProvider类,authorities就相当于为该ContentProvider指定域名-->
        <provider
            android:authorities="myContentProvider.zt.dictprovider"
            android:name=".DictProvider"
            android:exported="true"/>

二、ContentProvider

当我们通过上面配置文件注册了DictProvider之后,其他应用程序就可以通过该Uri来访问DictProvider所暴露的数据了(即:插入、删除、更新、查询)
为了其他程序可以对DictProvider所暴露的数据进行操作,DictProvider还应该提供如下几个方法:

  1. public boolean onCreate():该方法在ContentProvider创建后会被调用。
  2. public Uri insert(Uri uri,ContentValues values):根据Uri插入values对应的数据。
  3. public int delete(Uri uri,String selection,String[] selectionArgs):根据Uri删除selection条件所匹配的全部记录。
  4. public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs)根据Uri修改selection条件所匹配的全部记录。
  5. public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs, String sortOrder):根据Uri查询出selection条件所匹配的全部记录,其中projection就是一个列名列表,表明只选择出指定的数据列。

    ContentProvider所要求的Uri格式:

    如上文我们注册的:
    content://myContentProvider.zt.dictprovider/words
    content://+authorities+资源部分(数据部分)//按照访问资源不同,动态改变

    例如:

    content://myContentProvider.zt.dictprovider/words/2
    意味着访问word数据中ID为2的记录。

    再有:

    content://myContentProvider.zt.dictprovider/words/2/word
    意味着访问word数据中ID为2的记录的word字段。

    还有:

    content://myContentProvider.zt.dictprovider/word/detail/
    意味着访问word节点下的detail节点。

    为了将一个字符串转化成Uri,Uri工具类提供了parse()静态方法,如:

    Uri uri = Uri.parse("
    content://myContentProvider.zt.dictprovider/words/2")

三、ContentResolver

增删查改方法:

query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])

可以将ContentProvider理解成是数据库,其他应用程序使用ContentResolver来进行数据库的访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值