在基本了解了对内容提供者的操作之后,可以通过几个小例子来训练自己的所学。在很多应用中都需要访问通讯录,因此在这里我们通过单元测试和通讯录的内容提供者完成对通讯录中数据的操作,在通讯录数据库中有很多表,在这个例子中我们需要关注的是data,raw_contacts,mimetypes这三个表,data表格raw_contacts两个表通过raw_contact_id字段关联,关于表中的字段,在通讯录URI详解中有介绍,mimetypes这个表指定data表中,每一条记录所对应的含义,例如“vnd.android.cursor.item/name”指定了data表中相应行记录的是联系人姓名的相关信息。同时需要指出的是,在添加记录的时候,需要指定添加的每条记录类型是什么,因此需要ContentValues中绑定mimetype字段,其中的值可以在mimetypes表中查询,在将记录插入到数据库之后,数据库会自动的根据mimetype的值设定data中记录的mimetype_id。
下面一共有个测试方法,在第一种测试方法中,联系人的每一个信息都是分开添加的,第二种测试方法中,采用批处理的方法来完成联系人的添加。
下面是测试的代码
package com.example.test;
import java.util.ArrayList;
import android.content.ContentProvider;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.provider.ContactsContract;
import android.test.AndroidTestCase;
public class ContactsProviderTest extends AndroidTestCase {
public void testAddContacts(){
ContentValues values = new ContentValues();
Uri uri = this.getContext().getContentResolver().insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
long row = ContentUris.parseId(uri);
values.clear();
values.put("raw_contact_id", row);
values.put("mimetype","vnd.android.cursor.item/name");
values.put("data1", "Neway");
this.getContext().getContentResolver().insert(Uri.parse("content://com.android.contacts/data"), values);
values.clear();
values.put("raw_contact_id", row);
values.put("mimetype","vnd.android.cursor.item/phone_v2");
values.put("data1","15172546339");
this.getContext().getContentResolver().insert(Uri.parse("content://com.android.contacts/data"), values);
}
/*
* 采用批处理的方法对添加添加联系人进行操作。
*/
public void testAddContacts2() throws Exception{
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = this.getContext().getContentResolver();
ArrayList <ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentValues values = new ContentValues();
ContentProviderOperation operation1 = ContentProviderOperation.newInsert(uri).withValues(values).build();
operations.add(operation1);
ContentProviderOperation operation2 = ContentProviderOperation.newInsert(Uri.parse("content://com.android.contacts/data"))
.withValueBackReference("raw_contact_id", 0)//将第一次操作返回的结果赋值给raw_contact_id
.withValue("mimetype", "vnd.android.cursor.item/name")
.withValue("data1", "Colorful").build();
operations.add(operation2);
ContentProviderOperation operation3 = ContentProviderOperation.newInsert(Uri.parse("content://com.android.contacts/data"))
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype","vnd.android.cursor.item/phone_v2")
.withValue("data1","15516689456")
.build();
operations.add(operation3);
ContentProviderOperation operation4 = ContentProviderOperation.newInsert(Uri.parse("content://com.android.contacts/data"))
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype","vnd.android.cursor.item/email_v2")
.withValue("data1","cuiColorful@sina.com")
.build();
operations.add(operation4);
resolver.applyBatch("com.android.contacts", operations);
}
}
<!-- Baidu Button BEGIN -->
<!-- Baidu Button END -->
<!--192.168.100.33-->
<!-- Baidu Button BEGIN -->
<script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434"></script><script type="text/javascript" id="bdshell_js"></script><script type="text/javascript">
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
</script><!-- Baidu Button END -->
分享到:
相关推荐
ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip
4.3ContentProvider(new) - 副本
079集-ContentProvider(3)-读取并播放SD卡中的视频,讲解的比较详细,可以参考下哦。
Android四大组件之ContentProvider的单元测试
android中使用contentprovider编写简单的通讯录的简单实例 希望能给大家帮助
利用ContentProvider(数据组织工具)中通过ContentResolver(数据调用工具)调用系统URI实现的通讯录
利用ContentProvider实现了访问通讯录中的联系人和添加联系人的功能。
ContentResolver 查询手机通讯录联系人的名称,手机号码
本示例结合ContentProvider实现了数据库的增删改查操作 并且扩展性比较好
学习ContentProvider的练习-手机通讯录的查询和添加,删除。(删除功能不够彻底)
使用Android提供的contentprovider操作数据库的demo。
Android中用ContentProvider快速查找通讯录信息的代码清单.pdf 学习资料 复习资料 教学资源
android中的content provider测试,这个例子只是为了测试而测试。
用内容提供者操作文件,传输文件,方便与其他应用通信,免的写数据库。
ContentProvider使用简介里面的demo
contentprovider
Android移动应用开发中ContentProvider 单元主要内容.pdf 学习资料 复习资料 教学资源
Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作,可以直接操作数据库,也可以使用ContentProvider来对数据库进行间接操作。
自定义ContentProvider完成数据交互,文章:http://write.blog.csdn.net/postedit/43950781
个人整理的Android Intent的使用介绍 Android 组件之间的信使Intent Android 中的数据存取和ContentProvider