Android Content Provider的使用

让自己的数据和其他应用程序共享有两种方式:
      1. 创建一个属于自己的Content Provider
     2. 将自己的数据添加到一个已经存在的Content Provider中(相同的数据类型和具有写入该Content Provider的权限)

对于Content Provider,最重要的就是数据模型(data model)和URI 。
1.数据模型
     Content Provider将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个“_ID”数据字段,该字段唯一标识一条数据。
2.URI
     
将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的   类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider”  authorities=”com.example.transportationprovider”  . . .  >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI

ContentResolver介绍说明
访问Content Provider中的数据主要通过ContentResolver对象。查询一个Content Provider需要掌握如下的信息:
     唯一标识Content Provider的URI
     需要访问的数据字段的名称
     该数据字段的数据类型
提示: 如果需要访问特定的某条数据记录,只需该记录的ID 即可。
ContentResolver的主要接口,如下:
返回值 函数声明
final Uri insert(Uri url, ContentValues values)Inserts a row into a table at the given URL.
final int delete(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI.
final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)Query the given URI, returning a Cursor over the result set.
final int update(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI.

获取ContentResolver :  ContentResolver cr = getContentResolver();

ContentProvider负责:
  • 组织应用程序的数据;
  • 向其他应用程序提供数据;
ContentResolver负责:
  • 获取ContentProvider提供的数据;
  • 修改/添加/删除更新数据等;
ContentProvider 向外界提供数据操作的接口:

query(Uri, String[], String, String[], String)

insert(Uri, ContentValues)

update(Uri, ContentValues, String, String[])

delete(Uri, String, String[])
在提供数据表字段中包含一个ID,在创建表时INTEGER PRIMARY KEY AUTOINCREMENT标识此ID字段。

可参考:
Android应用程序之间数据共享——ContentResolver
Android应用程序之间数据共享——ContentProvider
获取电话簿:联系人和号码



你可能感兴趣的:(Android Content Provider的使用)