第一行代码(第三版)第八章总结

[第一行代码(第三版)]第八章总结

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:
        //...
}

4. 参考博客

  • 参考博客1
  • 参考博客2
  • 参考博客3-MIME类型理解

你可能感兴趣的:(第一行代码(第三版))