5.内容提供器

来源:互联网 发布:android 高仿淘宝 编辑:程序博客网 时间:2024/05/07 00:16

5.内容提供器

主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。

5.1访问其他程序中的数据

5.1.1ContentResolver

Context类的getContentResolver()方法得到ContentResolver类的对象。ContentResolver对象的insert(),delete(),update(),query()方法接受一个Uri对象,用Cursor对象接受增删查改方法后的结果,用While(cursor.moveToNext()){}进行遍历

Uri对象由权限和路径两部分组成,权限一般是包名,路径一般是表名。
Uri uri = Uri.parse(“content://com.example.app.provider/table1”);

5.2创建自己的内容提供器

新建MyProvider类继承ContentProvider类。重写6个方法。

  1. onCreate()
    初始化内容提供器的时候调用。通常会在这里完成对数据库的创建和升级等操作,
    返回true 表示内容提供器初始化成功,返回false 则表示失败。注意,只有当存在
    ContentResolver 尝试访问我们程序中的数据时,内容提供器才会被初始化。
  2. query()
    从内容提供器中查询数据。使用uri 参数来确定查询哪张表,projection 参数用于确
    定查询哪些列,selection 和selectionArgs 参数用于约束查询哪些行,sortOrder 参数用于
    对结果进行排序,查询的结果存放在Cursor 对象中返回。
  3. insert()
    向内容提供器中添加一条数据。使用uri 参数来确定要添加到的表,待添加的数据
    保存在values 参数中。添加完成后,返回一个用于表示这条新记录的URI。
  4. update()
    更新内容提供器中已有的数据。使用uri 参数来确定更新哪一张表中的数据,新数
    据保存在values 参数中,selection 和selectionArgs 参数用于约束更新哪些行,受影响的
    行数将作为返回值返回。
  5. delete()
    从内容提供器中删除数据。使用uri 参数来确定删除哪一张表中的数据,selection
    和selectionArgs 参数用于约束删除哪些行,被删除的行数将作为返回值返回。
  6. getType()
    根据传入的内容URI 来返回相应的MIME 类型。

一个内容URI 所对应的MIME字符串主要由三部分组分:

1. 必须以vnd开头。2. 如果内容URI以路径结尾,则后接android.cursor.dir/,如果内容URI以id结尾则后接android.cursor.item/。3. 最后接上vnd.<authority>.<path>。ex:vnd.android.cursor.dir/vnd.com.example.app.provider.table1

一个能够匹配任意表的内容URI 格式就可以写成:
content://com.example.app.provider/*
一个能够匹配table1 表中任意一行数据的内容URI格式就可以写成:
content://com.example.app.provider/table1/#

我们再借助UriMatcher 这个类就可以轻松地实现匹配内容URI 的功能。UriMatcher
中提供了一个addURI()方法,这个方法接收三个参数,可以分别把权限、路径和一个自定义
代码传进去。这样,当调用UriMatcher 的match()方法时,就可以将一个Uri 对象传入,返
回值是某个能够匹配这个Uri 对象所对应的自定义代码,利用这个代码,我们就可以判断出
调用方期望访问的是哪张表中的数据了

0 0