Content Providers

Content providers 是一个所有应用都能访问的“数据库”,它也是android系统中唯一一个所有应用都能访问的存储区。
android系统本身就有自带的Content providers 如(audio ,video,personal contact information 等)。如果你想让你的数据也共享的话,你有两种方式可以实现:第一种:创建一个自己的Provider(这个Provider要继承Content providers)第二种:将你的数据添加到一个已存在的Provider中,当然这是要符合你的数据类型并且你有权限这样做。

Content Provider Basics

Content providers 在实际中如何存储数据这是设计者决定的。但是Content providers 为增,删,改,查统一了一个统一的接口。
Content providers通常不是直接使用的,而是通过ContentResolver这个类。
ContentResolver cr = getContentResolver(); 
你可以用ContentResolver类中的方法去和任意一个你需要的content provider交互。
当一个命令发起时,系统会标识Content provider 是否存在并且确保它是已经运行着的。这实例化Content Provider的事情是系统来处理的,不需要你自己来处理。实际上,你从不直接处理Content Providers 。通常Content Provider只有一个实例(Singleton)。但是它却能和多个不同的应用交互。

The data model

Content providers 使数据像存储在数据库表中一样展示给我们,每一行代表一条记录,每一列代表一个字段。
_ID NUMBER NUMBER_KEY LABEL NAME TYPE
13 (425) 555 6677 425 555 6677 Kirkland office Bully Pulpit TYPE_WORK
44 (212) 555-1234 212 555 1234 NY apartment Alan Vain TYPE_HOME
45 (212) 555-6657 212 555 6657 Downtown office Alan Vain TYPE_MOBILE
53 201.555.4433 201 555 4433 Love Nest Rex Cars TYPE_HOME
在每条记录中,都会包含一个字段 _ID ,它用来标识它在表中的唯一性。
Content providers 在执行搜索时,都会返回一个Cursor “指针”对象。这样搜索就能在每一行每一列进行了。
每个content providers 都有一个公开的URI,这个URI用来唯一标识一个content providers 。一个content providers中有多个数据表,我们也用单独的一个URI来标识它。标识providers的所有URI都是以“content://”开始。
如果你要定义一个content providers ,你最好也给它定义一个URI常量,这样不但简便了客户端代码的编写,也简便了以后的更新。
所以URI这个标识是很重要的,每一个ContentResolver中的方法都将URI作为第一个参数。这个URI标识说明了ContentResolver要和哪个Content provider 对话。

Querying a Content Provider

查寻content provider,你需要三个信息:
1.标识出provider的URI 
2.你要得到的数据所在字段的名称
3.数据的类型

Making the query

查寻content providers的方法有ContentResolver.query()和Activity.managerQuery().这个方法的参数都是一样的,并且两个方法都返回一个Cursor对象。区别是managerQuery()方法使activity负责Cursor对象的生命周期。这是很有好处的,因为指针对象会随着activity生命周期的开始而开始,结束而结束。当然你也可以让ContentResolver.query()所返回的Cursor被activity管理,你只要调用Activity.startManagingCursor()就可以了。
如果想查寻一条记录要怎么做呢?你只要把_ID加到URI

你可能感兴趣的:(Android移动开发)