读书人

android 数据存储ContentProvider

发布时间: 2012-12-21 12:03:49 作者: rapoo

android 数据储存——ContentProvider(4)

初识ContentProvider

在第6章当中,介绍了组成Android程序的主要4部分,它们分别是。

Activity。

Broadcast Intent Receiver。

Service。

Content Provider。

关于Actvity和相关View的部分,已经在前边章节进行了比较详细的介绍,在这一节中,将学习Android应用里另外一个非常重要的部分ContentProvider。

1.什么是ContentProvider

Android这个系统和其他的操作系统还不太一样,读者需要记住的是,数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。那这个时候有读者就会提出问题,难道两个程序之间就没有办法对于数据进行交换?Android这么优秀的系统不会让这种情况发生的。解决这个问题主要靠ContentProvider。一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。下边列举一些较常见的接口,这些接口如下所示。

query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。

insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。

update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。

delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。

2.什么是ContentResolver

外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的ContentResolver实例。ContentResolver提供的接口和ContentProvider中需要实现的接口对应,主要有以下几个。

query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。

insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。

update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。

delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。

3.ContentProvider和ContentResolver中用到的Uri

在ContentProvider和ContentResolver当中用到了Uri的形式通常有两种,一种是指定全部数据,另一种是指定某个ID的数据。我们看下面的例子。

content://contacts/people/? 这个Uri指定的就是全部的联系人数据。

content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。

在上边两个类中用到的Uri一般由3部分组成。

第一部分是:"content://" 。

第二部分是要获得数据的一个字符串片段。

最后就是ID(如果没有指定ID,那么表示返回全部)。

由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码:

Contacts.People.CONTENT_URI (联系人的URI)。
?使用ContentProvider读取系统数据(1)

在这个例子里边,首先在系统的联系人应用当中插入一些联系人信息,然后把这些联系人的名字和电话再显示出来,通过这个例子可以学到。

如何在联系人应用当中添加联系人。

如何使用系统提供的ContentProvider。

如何使用ContentResolver当中的query()方法。

具体实现步骤如下所示。

1.第一步

在Eclipse中打开ex09_1_ContentProvider项目,具体操作如下。

(1)新建一个项目,依次单击File→New→Android Project项。

(2)在新建项目的对话框中,选择Create project from existing source项。

(3)单击浏览按钮,找到ex09_1_ContentProvider项目,然后单击确定按钮。

程序的目录结构如图8-23所示。

2.第二步

首先运行这个项目,将会看到如图8-24所示的界面。

????????(点击查看大图)图8-26? 单击New contact选项

读书人网 >Android

热点推荐