使用ContentResolver操作ContentProvider中的数据
来源:互联网 发布:js random函数 编辑:程序博客网 时间:2024/05/16 10:14
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver 类提供了与ContentProvider类相同签名的四个方法:
public Uri insert(Uri uri, ContentValues values)
该方法用于往ContentProvider添加数据。
public int delete(Uri uri, String selection, String[] selectionArgs)
该方法用于从ContentProvider删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
该方法用于更新ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
该方法用于从ContentProvider中获取数据。
这些方法的第一个参数为Uri,代表要操作的ContentProvider和对其中的什么数据进行操作,假设给定的是: Uri.parse(“content://cn.itcast.providers.personprovider/person/10”),那么将会对主机名为cn.itcast.providers.personprovider的ContentProvider进行操作,操作的数据为person表中id为10的记录。
使用ContentResolver对ContentProvider中的数据进行添加、删除、修改和查询操作:
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person");
//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "itcast");
values.put("age", 25);
resolver.insert(uri, values);
//获取person表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//把id为1的记录的name字段值更改新为liming
ContentValues updateValues = new ContentValues();
updateValues.put("name", "liming");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//删除id为2的记录
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);
如果ContentProvider的访问者需要得知ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,例子如下:
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法:
getContentResolver().registerContentObserver(Uri.parse("content://cn.itcast.providers.personprovider/person"),
true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
//此处可以进行相应的业务处理
}
}
加入读取联系人信息的权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
content://com.android.contacts/contacts 操作的数据是联系人信息Uri
content://com.android.contacts/data/phones 联系人电话Uri
content://com.android.contacts/data/emails 联系人Email Uri
读取联系人信息
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i("RongActivity", "phoneNumber="+phoneNumber);
}
phones.close();
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,
null, null);
while (emails.moveToNext()) {
// This would allow you get several email addresses
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
Log.i("RongActivity", "emailAddress="+ emailAddress);
}
emails.close();
}
cursor.close();
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- android 中使用ContentResolver操作ContentProvider中的数据
- Android笔记使用ContentResolver操作ContentProvider中的数据
- 我的android 第25天 - 使用ContentResolver操作ContentProvider中的数据
- 数据共享ContentProvider,ContentResolver
- ContentProvider实现数据共享 ContentResolver来操作暴露的数据
- ContentProvider与ContentResolver使用
- ContentProvider与ContentResolver使用
- ContentProvider与ContentResolver使用
- ContentProvider与ContentResolver使用
- 数据结构实验之求二叉树后序遍历和层次遍历
- java通过判断文本的编码方式再读取文件
- android 自定义控件
- 如何让sharepoint2010网站根据权限隐藏ribbon
- 未来的八种人将被社会淘汰
- 使用ContentResolver操作ContentProvider中的数据
- 译:深入Linux内核架构(第一章) 1.1——1.2
- 如何检查自己是否平庸?
- linux 系统裁减之-手动挂载 /proc, /sys /dev 目录
- Sap 主要模块业务主表
- Java运算符
- Andorid简单应用理财工具-实现添加账单页面
- 基于WiEngine游戏引擎--物理引擎
- 未来是湿的