首页 理论教育 ContentProvider存储方式优化方案

ContentProvider存储方式优化方案

时间:2023-06-27 理论教育 版权反馈
【摘要】:在Android系统中的两个程序之间可以进行数据交换,这个功能是通过Content Provider实现的。在程序中可以通过实现Content Provider抽象接口的方式将自己的数据显示出来,而在外界不会看到这个显示数据在应用当中是如何存储的。在现实中有如下几种比较常见的Content Provider接口。ContentResolver提供的接口需要和Content Provider中需要实现的接口相对应。

ContentProvider存储方式优化方案

在Android系统中的数据是私有的,这些数据包括文件数据、数据库数据和一些其他类型的数据。在Android系统中的两个程序之间可以进行数据交换,这个功能是通过Content Provider实现的。

1.ContentProvider基础

类Content Provider实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。在程序中可以通过实现Content Provider抽象接口的方式将自己的数据显示出来,而在外界不会看到这个显示数据在应用当中是如何存储的。我们无需关心是用数据库存储还是用文件存储。外界可以通过这套标准的、统一的接口在程序中实现数据交互,即可以读取程序里的数据,也可以删除程序里的数据。

在现实中有如下几种比较常见的Content Provider接口。

(1)ContentResolver接口

外部程序可以通过ContentResolver接口访问Content Provider提供的数据。在Activity当中,可以通过方法getContentResolver()获取当前应用的ContentResolver实例。ContentResolver提供的接口需要和Content Provider中需要实现的接口相对应。接口ContentResolver中的常用方法如下。

□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)Content Provider和ContentResolver中的URI

在Content Provider和ContentResolver中,通常有两种使用URI的形式,一种是指定所有的数据,另一种是只指定某个ID的数据。例如下面的代码。

978-7-111-52203-4-Part01-107.jpg

在上边用到的URI一般由如下3部分组成。

□第1部分是“content://”。

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

□第3部分是ID(如果没有指定ID,那么表示返回全部)。

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

978-7-111-52203-4-Part01-108.jpg

2.使用Content Provider

为了使读者掌握Content Provider存储的用法,接下来将通过一个具体实例的实现过程,详细讲解在Android中使用Content Provider存储数据的基本流程。

978-7-111-52203-4-Part01-109.jpg

主程序文件ActivityMain.java的具体代码如下。

978-7-111-52203-4-Part01-110.jpg

对上述代码的具体说明如下。

(1)方法getContentResolver():得到应用的ContentResolver实例。

(2)方法query(Phones.CONTENT_URI,null,null,null,null):是ContentResolver中的方法,用于查询所有联系人,并返回一个Cursor。此方法中各个参数的具体说明如下:(www.xing528.com)

□第1个参数为Uri,在此例中的URI是联系人的URI。

□第2个参数是一个字符串的数组,数组里边的每一个字符串都是数据表中某一列的名字,它指定返回数据表中那些列的值。

□第3个参数相当于SQL语句的where部分,描述哪些值是我们需要的。

□第4个参数是一个字符串数组,里边的值依次代替在第三个参数中出现的“?”。

□第5个参数指定了排序的方式。

(3)startManagingCursor(c)语句:让系统来管理生成的Cursor。

(4)ListAdapter adapter=new SimpleCursorAdapter(this,Android.R.layout.simple_list_item_2,c,new String[]{Phones.NAME,Phones.NUMBER},new int[]{Android.R.id.text1,Android.R.id.text2}):用于生成一个SimpleCursorAdapter。

(5)setListAdapter(adapter):将ListView和SimpleCursorAdapter进行绑定。

运行后的效果如图2-15所示。

978-7-111-52203-4-Part01-111.jpg

图2-15 初始效果

我们可以在联系人列表中添加几条数据,具体添加流程如下。

(1)单击模拟器的978-7-111-52203-4-Part01-112.jpg键,在弹出的界面中单击Contacts按钮,如图2-16所示。

978-7-111-52203-4-Part01-113.jpg

图2-16 出现的桌面

(2)单击MENU项,在弹出界面中单击Creat new contact选项,如图2-17所示。

978-7-111-52203-4-Part01-114.jpg

图2-17 单击New contact按钮

(3)添加联系人姓名和电话号码信息,如图2-18所示。

978-7-111-52203-4-Part01-115.jpg

图2-18 添加联系人姓名和电话号码

(4)单击Save按钮添加新建的联系人信息,如图2-19所示。

978-7-111-52203-4-Part01-116.jpg

图2-19 单击Save按钮以保存

通过上述操作步骤后,即可添加一条联系人的数据,如图2-20所示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈