Android应用数据存储几种方式(3)

(4)初识 ContentProvider
组成Android程序的主要4部分,它们分别是Activity,Broadcast Intent Receiver,Service,Content Provider.
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 并且符合一定条件的数据



什么是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 并且符合一定条件的数据

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)
下面通过一个例子来演示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//得到应用的ContentResolver 实例
Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);
startManagingCursor(c);
//我们将生成的Cursor 交给Activity 来管理,这样的好处是系统能自动做很多事情,比如当程序暂停的时候,这个系统可以卸载Cursor 以节省空间,当程序重新启动的时候系统重新查询生成Cursor.
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 });
setListAdapter(adapter);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值