Android content provider
来源:互联网 发布:淘宝女装旗袍 编辑:程序博客网 时间:2024/06/01 08:41
检索数据
1、content provider basics
2、检索content provider
3、修改content provider数据
4、创建自己的content provider
1、content provider basics
所有的content provider都会实现一个公共的接口
,可以实现对content provider的增删改查
在activity中需要通过接口函数getContentResolver()方法获取
ContentResolver 对象,
content provider数据模型
content provider的访问
通过content provider的Uri可以访问到数据集,掌管多个数据集(多个数据表)的content provider为每个数据集都提供不同的Uri,所有的Uri都已content://开头,表明该数据由一个content provider掌管。如果定义了一个contentprovider,那么一般要为该content provider的Uri定义一个常量,例如在android平台中为存储联系人电话号码和联系人图片的Uri常量CONTENT_URI,定义的常量值分别为
android.provider.Contacts.Phones.CONTENT_URI
android.provider.Contacts.Photos.CONTENT_URI
这两个
Uri
都被
Contacts content provider掌管
Uri常量也是 ContentResolver
函数的第一个参数,指明需要访问的目标
provider
和目标
content provider的哪个表,
2、检索content provider
检索provider需要的信息
|---Uri(数据表)
|---字段名
|---字段的数据类型
如果指定查询行,需要改行的id
查询content provider可以使用下面两个函数
ContentResolver.query()
Activity.managedQuery()
这两个函数参数相同,而且都返回Cursor对象
managedQuery()
方法会使activity管理Cursor的生命周期
两个函数的参数
第一个参数:provider URI
如果指定某一条记录,可以将该条记录的_id添加到Uri的后面,例如某条记录的id是123,那么该Uri是
content://. . . ./123
有两个助手函数
ContentUris.withAppendedId()
和 Uri.withAppendedPath()
可以实现在
Uri
后面添加
id
,
Both arestatic methods that return a Uri object with the ID added
// Use the ContentUris method to produce the base URI for the contact with _ID == 23.Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI, 23);// Alternatively, use the Uri method to produce the base URI.// It takes a string rather than an integer.Uri myPerson = Uri.withAppendedPath(People.CONTENT_URI, "23");// Then query for this specific record:Cursor cur = managedQuery(myPerson, null, null, null, null);
第二个参数:
字段名:null代表所有字段,否则只会返回字段名指定的字段,android系统为其自己的
Content provider的字段名都提供了常量
第三个参数:
过滤条件:null代表返回所有
第四个参数: Selection arguments
第五个参数:指定返回数据的排序方式,null代表按照默认顺序返回,可能是无序的
一个完整例子
import android.provider.Contacts.People;import android.database.Cursor;// Form an array specifying which columns to return. String[] projection = new String[] { People._ID, People._COUNT, People.NAME, People.NUMBER };// Get the base URI for the People table in the Contacts content provider.Uri contacts = People.CONTENT_URI;// Make the query. Cursor managedCursor = managedQuery(contacts, projection, // Which columns to return null, // Which rows to return (all rows) null, // Selection arguments (none) // Put the results in ascending order by name People.NAME + " ASC");
返回的结果
读取返回的数据
返回的Cursor对象可能没有数据或者一行或者多行
如果想得到返回结果某行某个字段的值,必须知道该字段的数据类型,
However, for most types, if you call the methodfor reading strings, the Cursor object will give you the String representationof the data
因为返回的Cursor对象对不同的数据类型需要用不同的方法getString()
, getInt()
, and getFloat()
.读取,方法的参数为整型的字段索引,可以通过getColumnIndex函数根据字段名获得在返回结果中的索引,取得结果示例
import android.provider.Contacts.People;private void getColumnData(Cursor cur){ if (cur.moveToFirst()) { String name; String phoneNumber; int nameColumn = cur.getColumnIndex(People.NAME); int phoneColumn = cur.getColumnIndex(People.NUMBER); String imagePath; do { // Get the field values name = cur.getString(nameColumn); phoneNumber = cur.getString(phoneColumn); // Do something with the values. ... } while (cur.moveToNext()); }}
ModifyingData
Data kept by a content provider can be modified by:
Adding new records
Adding new values to existing records
Batch updating existing records
Deleting records
数据修改是通过ContentResolver中的方法,有时候某个 content providers在写入数据比读取数据需要更严格的权限控制 ,如果没有对content provider的操作权限,函数执行失败
content providers
主要分为两步:
|---创建一个map集合对象 ContentValues
,并将给该集合赋值,
|--
调用ContentResolver.insert()
,将content provider的Uri和ContentValues
集合对象传入,该函数返回插入记录的
Uri
,即包含了该插入行的
id
的
Uri
import android.provider.Contacts.People;import android.content.ContentResolver;import android.content.ContentValues; ContentValues values = new ContentValues();// Add Abraham Lincoln to contacts and make him a favorite.values.put(People.NAME, "Abraham Lincoln");// 1 = the new contact is added to favorites// 0 = the new contact is not added to favoritesvalues.put(People.STARRED, 1);Uri uri = getContentResolver().insert(People.CONTENT_URI, values);
Addingnew values to existing records
对于存在的一条记录,可以给该记录添加新的字段值或者之直接修改字段值,例如为人员记录添加email地址,修改phoneNumber
- Android Content Provider
- Android Content Provider
- Android Content Provider
- Android Content Provider
- Android Content Provider
- Android中的content provider
- android Content Provider
- Android 复习 Content Provider
- Android Content Provider 测试
- android笔记 Content Provider
- Android的Content Provider
- android Content provider 组件
- android content provider 使用
- android Content Provider
- android Content Provider详解
- Android 组件Content Provider
- Android content provider
- Android Content Provider Basics
- 触摸屏的校准
- C++ const
- sed行尾追加变成了行首替换
- java数组定义及使用
- web应用中一些放在内存里面带来方便操作
- Android content provider
- XML解析使用固定格式解析本地与解析Tomcat服务器上面的xml文件
- ErrorCode:1175.You are using safe update mode and you tried to update a table without a WHERE that u
- hdu 1327 Definite Values--map
- 设计模式中类的关系
- 转:Service创建有两种方法: startService或者bindService
- 关于s3c6410的SD卡启动
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- perl 学习1