Android应用程序组件Content Provider应用实例

上文简要介绍了应用程序组件 在应用程序间共享数据的原理,但是没有进一步研究它的实现 。本文将实现两个应用程序,其中一个以 的形式来提供数据访问入口,另一个通过这个 来访问这些数据 。本文的例子不仅可以为下文分析 的实现原理准备好使用情景,还可以学习到它的一个未公开接口 。
《系统源代码情景分析》一书正在进击的程序员网()中连载,点击进入!
本文中的应用程序是按照上一篇文章应用程序组件 简要介绍和学习计划中提到的一般应用程序架构方法来设计的 。本文包含两个应用程序,其中,第一个应用程序命名为,它使用了数据库来维护一个文章信息列表,同时,它定义了访问这个文章信息列表的URI,这样,我们就可以通过一个 组件来向第三方应用程序提供访问这个文章信息列表的接口;第二个应用程序命名为,它提供了管理保存在应用程序中的文章信息的界面入口,在这个应用程序中,用户可以添加、删除和修改这些文章信息 。接下来我们就分别介绍这两个应用程序的实现 。
1. 应用程序的实现
首先是参照在上为系统内置Java应用程序测试 层的硬件服务一文,在/目录下建立工程文件目录 。在继续介绍这个应用程序的实现之前,我们先介绍一下这个应用程序用来保存文章信息的数据库的设计 。
我们知道,在系统中,内置了一款轻型的数据库 。是专门为嵌入式产品而设计的,它具有占用资源低的特点,而且是开源的,非常适合在平台中使用,关于的更多信息可以访问官方网站 。
应用程序就是使用来作为数据库保存文章信息的,数据库文件命名为.db,它里面只有一张表,表的结构如下所示:
-------------------------------------------------------------
| -- _id -- |----| ---- | -- _url -- |
-------------------------------------------------------------
|||||
它由四个字段表示,第一个字段_id表示文章的ID,类型为自动递增的,它作为表的key值;第二个字段表示文章的题目,类型为text;第三个字段表示文章的摘要,类型为text;第四个字段_url表示文章的URL,类型为text 。注意,当我们打算将数据库表的某一列的数据作为一个数据行的ID时,就约定它的列名为_id 。这是因为我们经常需要从数据库中获取一批数据,这些数据以的形式返回,对这些返回来的数据我们一般用一个来显示,而这个需要一个数据适配器来作为数据源,这时候就我们就可以以这个来构造一个 。有些,例如..,它们在实现自己的成员函数来获取指定数据行的ID时,就必须要从这个中相应的行里面取出列名为_id的字段的内容出来作为这个数据行的ID返回给调用者 。当然,我们不在数据库表中定义这个_id列名也是可以的,不过这样从数据库中查询数据后得到的适合性就变差了,因此,建议我们在设计数据库表时,尽量设置其中一个列名字_id,并且保证这一列的内容是在数据库表中是唯一的 。
下面我们就开始介绍这个应用程序的实现了 。这个应用程序只有两个源文件,分别是.java和,都是放在shy.luo..这个下面 。在.java文件里面,主要是定义了一些常量,例如用来访问文章信息数据的URI、MIME(Mail )类型以及格式等,这些常量是第三方应用程序访问这些文章信息数据时要使用到的,因此,我们把它定义在一个单独的文件中,稍后我们会介绍如果把这个.java文件打包成一个jar文件,然后第三方应用程序就可以引用这个常量了,这样也避免了直接把这个源代码文件暴露给第三方应用程序 。
源文件.java位于src/shy/luo//目录下,它的内容如下所示: