[第一行代码(第三版)]第八章总结
1. ContentProvider
1.1 概念
ContentProvider用于与其它应用程序共享数据。
1.2 统一资源标识符(URI)
其他的程序如果想使用本程序中的数据,需要通过 URI 找到对应的ContentProvider。内容提供者可以根据传过来的URI来确定它需要的表和数据。其格式如下:
<prefix>://<authority>/<data_type>/<id>
prefix
:固定content://
。authority
:内容提供者的拥有者,一般为包名,例如:com.example.test.testApp
。data_type
:数据类型。id
:数据项的索引。
例如:content://com.example.test.testapp/books/1
。
1.3 MIME类型
MIME类型的作用是指定某个扩展名的文件用某种应用程序来打开,在这里是getType()方法需要返回的值,表示数据的类型,是内容提供者必须要实现的,按照格式来说可以分为两个部分:
//如果内容URI以路径结尾,用这个
vnd.android.cursor.dir/vnd.<authority>.<path>
//如果内容URI以id结尾,则用这个
vnd.android.cursor.item/vnd.<authority>.<path>
1.4 常用方法
onCreate()
:初始化ContentProvider时调用,通常在这里初始化和更新数据库。query()
:从ContentProvider查询数据。insert()
:向ContentProvider插入数据。update()
:更新ContentProvider已有数据。delete()
:删除ContentProvider数据。getType()
:根据传入的内容URI返回相应的MIME类型。
2. ContentResolver
2.1 介绍
ContentResolver类是外部应用与ContentProvider进行交互的工具类。ContentResolver类提供了与ContentProvider类相同的4个同名方法:
// 外部应用向ContentProvider中添加数据
public Uri insert(Uri uri, ContentValues values)
// 外部应用删除ContentProvider中的数据
public int delete(Uri uri, String selection, String[] selectionArgs)
// 外部应用更新ContentProvider中的数据
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
// 外部应用获取ContentProvider中的数据
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
3. UriMatcher类
3.1 介绍
UriMatcher时一个用于匹配内容URI的工具类,它提供了一个addUri()
方法,接受3个参数,可以分别把authority、path和一个自定义代码穿进去,这样,当调用UriMatcher的match()
方法时,可以将一个Uri对象传入,返回值是某个能够匹配这个Uri对象所对应的自定义代码,利用这个代码,我们就可以判断出调用方希望访问的是哪张表的哪个数据了。
3.2 示例
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
//路径是content://com.example.contentprovider.hellocontentprovider/person 则返回1
// (如果是查询,含义相当于查询person表)
uriMatcher.addURI(authority,"person",MULTIPLE_CODE);
//在ContentProvider的类中的CRUD方法中根据匹配的uri返回的自定义代码去执行数据操作
switch (uriMatcher.match(uri)){
case 0:
//...
case 1:
//...
}