Android四大组件之ContentProvider

来源:互联网 发布:c语言培训深圳 编辑:程序博客网 时间:2024/04/28 10:21

1.什么是ContentProvider

一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。 也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,

2.什么是ContentResolver
外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例。
 ContentResolver提供的接口和ContentProvider中需要实现的接口对应,主要有以下几个。

·  query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。
·  
insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。
·  update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。
·  delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。


3.ContentProvider和ContentResolver中用到的Uri
在ContentProvider和 ContentResolver当中用到了Uri的形式通常有两种,一种是指定全部数据,另一种是指定某个ID的数据。
我们看下面的例子。

·  content://contacts/people/  这个Uri指定的就是全部的联系人数据。
·  content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。 
在上边两个类中用到的Uri一般由3部分组成。
·  第一部分是方案:"content://" 这部分永远不变
·  第二部分是授权:"contacts"
·  第二部分是路径:"people/","people/1"(如果没有指定ID,那么表示返回全部)。
由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码:
·  Contacts.People.CONTENT_URI (联系人的URI)。