ContentProdiver (android)

每天进步一点

    我们大家都知道,在android开发中我们会碰到android的四大组件(activity、service、contentprovider、intent)。其中contentprodiver在我们的日常使用中可能并不是那么明显。也可以说我们平时其实在不知不觉的运用这个功能。前些日子因为想开发一个通讯录的程序,所以对contentprodiver有了一定的了解。

    通过这个通讯录的小程序也对android的contentprodiver的功能有了进一步的了解。

    在开发通讯录的时候我很单纯的认为在布局方面是要使用listview,在数据存储方面只要使用SQLite就可以。我被我的天真打败了。其实要实现拨号的列表的确只要使用这些就可以了,但是我们不能不考虑自己的数据的共享。我们可以让自己通讯录也就是电话簿的数据共享出去,这样可以使其他程序调用这些数据。这个时候contentprodiver就起到了十分重要的作用。以前我们对数据的操作都是直接通过sql语句直接对数据库进行增删改查,当然我们的主要思路也是这样,但是如果我们的数据不是通过SQLite存储的呢?还有通过文件存储这些方式。不同的存储方式有不同的操作方式。这些数据保存在一个程序中,当我们的另一个程序要调用这些数据的时候岂不是要针对不同的存储形式进行不同的代码编写。哦不。所以contentprodiver就是为了解决我们的这样个问题。我们不必考虑数据时通过什么方式存储的,我只要知道这个对应的数据的contentprodiver的URL是什么,通过这个URL(统一资源定位符)来查找数据。contentprodiver里通过了相应的增删改查的方法。

    我的主要思路是这样的:(以SQLite方式存储为例)

     当我们的程序除了要为本程序提供数据之外还要对外共享数据时,我们可以考虑使用contentprovider

     首先自定义一个mycontentprodiver类继承contentprodiver类,覆写里面的增删改查的方法,当然这些方法都是真水SQLite的操作。并且定义好这个自定义contentprodiver的URL。以后就可以通过这个URL对数据进行操作了。在自己的应用程序中我们可以通过另一个重要的对象contentresolve,对数据通过url指向到自定义的contentprodiver类这样就可以进行增删改查的操作了,并且如果考虑到数据操作的异步性可以用我在另一篇文章中提到的ascnqueryhandle对利用线程对数据进行增删改查的操作。这要本程序的数据提供就搞定了,具体的操作请参考相关的文档,这里只讲述思路。

     那么如果我有另一个程序也像使用这个程序的数据怎么办。那么我只要利用那个URL就可以了在另一个程序中通过URL指向我们那个自定义的contentprodiver类里面不是有增删改查的方法吗。在另一个程序中也是通过contentresolver这个对象来进行增删改查的操作的。这里的增删改查的操作就是对应了我们自定义的contentprodiver类的增删改查的操作。这样一来在我们的程序中就不需要考虑人家用的是什么方式存储的,也不用知道人家的代码是怎么写的。只要人家提供了这个URL 的资源标记,那么我们就能通过这个URL对数据进行增删改查。

     这也就是contentprodiver的作用。

     再举另一个例子,我们手机自带的通讯录的数据时存储在/data/data/com.android.providers.contacts/databases/contacts2.db中的,是以一个SQLite的数据库表,但是我们在调用系统的通讯录的时候只需要调用url=content:// com.android.contacts/data/phones就可以了,这个url对应了上述数据库表中的contacts表 和 raw_contacts表 以及 data表 这样我们就将本程序与系统的通讯录数据有了联系可以进行增删改查的操作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值