使用内容提供者
1.ContentProvider
ContentProvider是一种通用的接口机制,它可以在应用程序之间共享数据。通过抽象出底层的数据源,内容提供者可以把应用程序层和数据层分开,从而使应用程序变为数据源不可知的(agnostic)的。
通过将数据源作为内容提供者来发布,你就可以在新的应用程序中利用和扩展该数据。
2.ContentResolver
对内容提供器的访问是由内容解析器(ContentResolver)类进行处理的。每个应用程序的上下文都有一个单独的ContentResolver,可以使用如下方法访问:
ContentResolver cr = getContentResolver();
3.查询内容
与数据库中的操作一样,查询结果是作为指向结果集的Cursor而返回的。使用ContentResolver对象的query方法进行查询,代码如下:
//返回所有行
Cursor allRows = getContentResolver().query(MyProvider.CONTENT_URI,
null,null,null.null);
//返回第三列等于某个值的所有行,并且这些行按照第五列排序
String where = KEY_COL3 + “=”+requiredValue;
String order = KEY_COL5;
Cursor someRows = getContentResolver().query(MyProvider.CONTENT_URI,
null, where, null, order);
4.插入、更新和删除内容
4.1 插入
ContentResolver提供了两种方法来向ContentProvider插入记录----insert和bulkInsert。通过下列代码区别两种方法:
//创建要插入的一行新值
ContentValues newValues = new ContentValues();
//为每一行赋值
newValues.put(COLUMN_NAME,newValues);
[…Repeat for each column…]
Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI,
newValues);
//创建要插入的一行新值
ContentValues[] valueArray = new ContentValues[5];
//待实现:创建新行的数组
int count = getContentResolver().bulkInsert(MyProvider.CONTENT_URI,
valueArray);
4.2删除
//删除特定的行,myRowUri为特定行的URI
getContentResolver().delete(myRowUri,null,null);
//删除前5行
String where = “id<5”;
getContentResolver().delete(MyProvider.CONTENT_URI,where,null);
4.3更新
//创建要插入的一行新值
ContentValues newValues =new ContentValues();
//创建一个替换映像,指定希望更新哪一行,以及为每一行分配哪些值
newValues.put(COLUMN_NAME,newVALUE);
//应用到前5行
String where = “id<5”;
getContentResolver().update(MyProvider.CONTENT_URI,newValues, where, null);