|
|
|
|
移动端

3.2.4 ContentProvider 存储

《Android游戏开发从入门到精通》第3章Android 游戏开发基础,本章将引导读者开始Android 手机游戏开发,详细讲解Android 游戏开发的基本知识,为读者进行本书后面知识的学习打下基础。本节为大家介绍ContentProvider 存储。

作者:王玉芹来源:机械工业出版社|2017-11-14 11:11

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


3.2.4 ContentProvider 存储

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

1.ContentProvider 基础

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

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

(1)ContentResolver 接口

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

query ( Uri uri, String[] projection, String selection, String[] selectionArgs,StringsortOrder):通过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)ContentProvider 和ContentResolver 中的URI

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

  1. content://contacts/people/ //此Uri 指定的就是全部的联系人数据  
  2. content://contacts/people/1 //此Uri 指定的是ID 为1 的联系人的数据 

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

第一部分是“content://”。

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

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

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

  1. Contacts.People.CONTENT_URI (联系人的URI) 

2. 使用ContentProvider

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

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

  1. protected void onCreate(Bundle savedInstanceState) {  
  2. super.onCreate(savedInstanceState);  
  3. Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);  
  4. startManagingCursor(c);  
  5. ListAdapter adapter = new SimpleCursorAdapter(this,  
  6. android.R.layout.simple_list_item_2, c,  
  7. new String[] { Phones.NAME, Phones.NUMBER },  
  8. new int[] { android.R.id.text1, android.R.id.text2 });  
  9. setListAdapter(adapter);  

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

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

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

第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 进行绑定。

运行后的效果如图3-11 所示。

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

(1)单击模拟器的键,在弹出界面单击“Contacts”图标,如图3-12 所示。

(2)单击MENU 项,在弹出界面中单击“New contact”选项,如图3-13 所示。

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

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

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


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

鸟哥的Linux私房菜——服务器架设篇(第二版)

本书是对连续三年蝉联畅销书排行榜前10名的《Linux鸟哥私房菜——服务器架设篇》的升级版,新版本根据目前服务器与网络环境做了大幅度修订...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊