ContentProvider
进行跨进程通信,实现进程间得数据交互和共享。通过 Context 中 getContentResolver() 获得实例,通过 Uri 匹配进行数据的增删改查。ContentProvider 使用表的形式来组织数据,无论数据的来源是什么,ContentProvider 都会认为是一种表,然后把数据组织成表格
1. 小结
-
向我们提供了在 应用程序之间 共享数据的一种机制,且为存储和获取数据提供统一的接口。
-
且ContentProvide对数据进行封装,不用关心数据存储的细节。[使用表的形式来组织数据]。
-
使用ContentProvider可以在不同的应用程序之间共享数据。
-
Android为常见的一些数据提供了默认的ContentProvider(包括音频、视频、图片和通讯录等)。总的来说使用ContentProvider对外共享数据的好处是统一了数据 的访问方式。
-
ContentProvider分为系统的和自定义的,系统的也就是 例如:联系人,图片,视频,音频 等数据。
-
【SQLite 用于存储 一个应用程序私有的数据,而ContentProvider则提供了应用程序间数据共享的机制】
-
【当应用继承ContentProvider类,并重写该类用于 提供数据 和 操作存储数据 的方法,就可以向其他应用共享其数据。】
2. [ContentProvider 与 统一资源标识符(url) 的联系 ]
-
每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。 】
-
Android系统所提供的所有的ContentProvider都存放在android.provider包当中】
-
学习ContentProvider的实现,实际上是为了 以后可以更加轻松的使用系统提供的ContentProvider,因为实际开发中很少需要自己创建ContentProvider】
3. ContentProvider提供的方法:
query:查询 ,返回一个Cursor对象,Cursor本身是一个接口,但是Android对于不同数据库的访问有着不同的Cursor对象的实现
insert:插入
update:更新
delete:删除
getType:得到数据类型
onCreate:创建数据时调用的回调函数
然后我们可以在自己的子类中,重写这些方法。
4. 【自定义 ContentProvider -示例】
-
定义一个常量类 :其中必须包含:public static final CONTENT_URI 。 用于表示本ContentProvider,所提供的数据 URI
一个ContentProvider如果有多个子表,则需要定义多个URI常量,且建议定义一些常量来表示 表中的列名。并设置好 主键()
-
定义一个类,继承自ContentProvider
-
然后重写父类的:query ,insert,update,delete,getType,onCreate,等方法。
-
在AndroidManifest.xml文件中声明