ContentProvider介绍

来源:互联网 发布:手机版淘宝类目的修改 编辑:程序博客网 时间:2024/05/18 16:55

一、什么是ContentProvider

ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。


ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

ContentProvider向我们提供了我们在应用程序之前共享数据的一种机制,而我们知道每一个应用程序都是运行在不同的应用程序的,数据和文件在不同应用程序之间达到数据的共享不是没有可能,而是显得比较复杂,而正好Android中的ContentProvider则达到了这一需求,比如有时候我们需要操作手机里的联系人,手机里的多媒体等一些信息,我们都可以用到这个ContentProvider来达到我们所需。


***Uri介绍


为系统的每一个资源给其一个名字,比方说通话记录。

1)、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。

2)、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D 4个部分:


A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;"content://"

B:URI 的标识,用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称

C:路径(path),通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就可以了;"content://com.bing.provider.myprovider/tablename"

D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部; "content://com.bing.provider.myprovider/tablename/#" #表示数据id。


PS:


路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

1、要操作person表中id为10的记录,可以构建这样的路径:/person/10

2、要操作person表中id为10的记录的name字段, person/10/name

3、要操作person表中的所有记录,可以构建这样的路径:/person

4、要操作xxx表中的记录,可以构建这样的路径:/xxx

5、当然要操作的数据不一定来自数据库,也可以是文件、xml或网络等其他存储方式,如下:

要操作xml文件中person节点下的name节点,可以构建这样的路径:/person/name

6、如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:Uri uri = Uri.parse("content://com.bing.provider.personprovider/person")

原创粉丝点击