Android -- ContentProvider与联系人
数据库
读联系人
- raw_contacts表:保存联系人的id contact_id保存联系人的id
- data表:保存联系人的数据 data1存放数据 mimetype_id存放数据类型 raw_contact_id存放数据属于哪一个联系人的
- mimetypes表:保存数据的类型 1 –> email 5 –>phone 7 –>name
流程:
1.查询raw_contact表,把所有的联系人的id取出来。
2.根据id查询data表,把这个id对应的所有的数据取出来。
3.根据数据的类型 查询mimetypes表获取数据业务的类型。
写联系人
1.在raw_contact表中添加一个id。
2.使用这个新添加的id在data表里面添加对应的数据。
读取
public class MainActivity extends Activity { private Button btn_read; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn_read = (Button) findViewById(R.id.btn_read);
btn_read.setOnClickListener(new buttonLisnter());
} class buttonLisnter implements OnClickListener { @Override
public void onClick(View v) {
// 查询raw_contact表获取联系人ID
ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri datauri = Uri.parse("content://com.android.contacts/data"); Cursor cursor = resolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndex("contact_id"));
System.out.println("id====" + id);
Cursor dataCursor = resolver.query(datauri, null,
"raw_contact_id=?", new String[] { id }, null);
while (dataCursor.moveToNext()) {
String data1 = dataCursor.getString(dataCursor
.getColumnIndex("data1"));
String mimetype = dataCursor.getString(dataCursor
.getColumnIndex("mimetype"));
System.out.println("data1=" + data1
+ "--------------mimetype=" + mimetype);
}
dataCursor.close();
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
}
cursor.close();
} } }
写入
case R.id.btn_write:
// 向raw_contact表里调价联系人的id
ContentResolver reslo = getContentResolver();
// 获取raw_contact对应的uri
Uri uri1 = Uri
.parse("content://com.android.contacts/raw_contacts");
Uri datauri1 = Uri.parse("content://com.android.contacts/data");
ContentValues values = new ContentValues();
Cursor cursor1 = reslo.query(uri1, new String[] { "_id" },
null, null, null);
cursor1.moveToNext();
int lastId = cursor1.getInt(0);
int newId = lastId + 1;
values.put("_id", newId);
reslo.insert(uri1, values);
// 添加data1
ContentValues phoneValues = new ContentValues();
phoneValues.put("data1", "88888888888");
phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
phoneValues.put("raw_contact_id", newId);
reslo.insert(datauri1, phoneValues); ContentValues emailValues = new ContentValues();
emailValues.put("data1", "admin@yyd.com");
emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
emailValues.put("raw_contact_id", newId);
reslo.insert(datauri1, emailValues); ContentValues nameValues = new ContentValues();
nameValues.put("data1", "admin@yyd.com");
nameValues.put("mimetype", "vnd.android.cursor.item/name");
nameValues.put("raw_contact_id", newId);
reslo.insert(datauri1, nameValues); Toast.makeText(MainActivity.this, "插入OK", Toast.LENGTH_LONG)
.show(); break;
注意
当联系人被删除之后,其实联系人还是存在在数据库里面的,但是只是”contact_id”为null了,所以为了不取出用户已经删除的联系人,读取到的”contact_id”需要判断一下是否为null。
我是天王盖地虎的分割线
源代码:http://pan.baidu.com/s/1dD1Qx01
读取联系人.zip
转载请注明出处:http://www.cnblogs.com/yydcdut
最新文章
- windows自带记事本导致文本文件(UTF-8编码)开头三个字符乱码问题
- 提额 APP
- 基于WWF搭建的通用审批流程
- fatal error: Invalid layout of preloaded class
- cocos基础教程(5)数据结构介绍之cocos2d::Map<;K,V>;
- 【CentOS】Eclipse中svn插件使用
- Linux下高并发socket链接数测试
- 《ISCSI集中存储》RHEL6——CE
- Oracle中正则表达式的使用
- get方式编码问题解决方案 转载
- Avi视频生成缩略图时,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
- 解析ASP.NET Mvc开发之删除修改数据
- Logstash利用GeoIP库显示地图以及通过useragent显示浏览器(四)
- Rsync数据远程同步备份
- web storage 离线存储
- vscode使用shell
- canvas - 简单画板
- GIS中的引擎:地图引擎
- NOIP竞赛须知
- TensorFlow函数:tf.random_shuffle
热门文章
- [hdu4667]Building Fence 计算几何 瞎瘠薄搞
- 【记录】mysql 5.7.20安装 出现...mysql-5.7.20-winx64\data\is_writable’ Errcode: 2 - No such file or directory
- Cookie的用法
- 【转】全面了解Mysql中的事务
- 数位dp小结以及模板
- 【20181027T3】山河令【DP套DP】
- bzoj 4094: [Usaco2013 Dec]Optimal Milking
- bzoj 3772
- ThinkPHP -- 去除URL中的index.php
- python开发_zlib_完整版_博主推荐