一、什么是ContentProvider
ContentProvider是所有应用程序之间数据存储和检索的桥梁,它的作用就是使得这个应用程序之间实现数据共享。在Android当中,ContentProvider是一中特殊的存储数据的类型,它提供一套标准的接口用来获取数据、操作数据。
二、ContentProvider的作用
显然,ContentProvider是用于不同程序之间共享数据的,它提供一套标准的接口用来获取数据、操作数据。
需要注意的是要在配置文件当中添加相应的权限。
三、实现数据共享的相关类、接口与权限
1、ContentProvider
一个程序可以通过实现一个ContentProvider的抽象方法接口将自己的数据暴露出去,外部程序可以通过一个标准的接口来和程序内的数据打交道。因此自定义一个ContentProvider类必须实现几个抽象方法接口。这些常用抽象方法如下表:
方法 | 描述 |
query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) | 通过URI进行查询,返回一个Cursor对象 |
insert(Uri uri,ContentValues values) | 将一组数据插入到URI指定的地方 |
delete(Uri uri,String where,String[] selectionArgs) | 删除指定URI并且符合一定条件的数据 |
update(Uri uri,ContentValues values,String where,String[] selectionArgs) | 更新URI指定位置并且符合一定条件的数据 |
getType(Uri uri) | 获得MIME数据类型 |
onCreate() | 当ContentProvider创建时调用 |
getContext() | 获得Context对象 |
在上述方法当中使用最多的是query方法,下面对其参数进行说明。
(1)Uri为指定的URI地址。
(2)projection为指定的返回列名。
(3)selection用于指定返回的行,相当于SQL语句中的WHERE条件子句。
(4)selectionArgs对参数selection中出现的“?”进行替换。
(5)sortOrder指定返回结果的排序方式。
2、ContentResolve
当外部应用程序需要对ContentProvider中的数据进行添加、删除、修改和查询操作,可以使用ContentResolve接口来完成,在Activity中通过getContentResolve()方法获取ContentResolve对象。ContentResolve提供的抽象方法与ContentProvider需要实现的方法对应,同样使用query()、insert()、delete()、update()等方法来操作数据,这些方法的名称和参数和ContentProvider中的一样。
一般情况下,ContentProvider是单实例的,但是可以有多个ContentResolve在不同的应用程序和不同的进程之间和ContentProvider进行交互。
3、URI
URI是只想数据的一个资源标识符。通过URI使得ContentResolve知道与哪一个ContentProvider对应,并且来操作哪些数据。
ContentProvider简单应用案例下载:点击打开链接
参考文献:
1、张冬玲,杨宁. Android应用开发教程:清华大学出版社,2013年4月第1版:207-211