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
Android -- ContentProvider与联系人的更多相关文章
- Android ContentProvider基本用法
转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了 ...
- Android基础 : Android ContentProvider
Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...
- android之读取联系人信息
联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...
- Android Phonebook编写联系人UI加载及联系人保存流程(一)
2014-01-06 17:05:11 将百度空间里的东西移过来. 本文适合ROM定制做Phonebook的童鞋看,其他人飘过即可- Phonebook添加/编辑联系人UI加载及保存联系人流程,是一系 ...
- Android ContentProvider完整案例
ContentData类,提供数据常量: /** * 提供ContentProvider对外的各种常量,当外部数据需要访问的时候,就可以参考这些常量操作数据. * @author HB * */ pu ...
- Android——ContentProvider
xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- Android ContentProvider 启动分析
对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...
- android中ContentProvider获取联系人 总结
35.内容提供者:ContentResolver 用内容提供者来获取联系人信息 35-1:权限 <!-- 对联系人的读.写权限 --> <uses-permission androi ...
- Android -- ContentProvider, 读取和保存系统 联系人
1. 示例代码 需要的读写联系人的权限 <uses-permission android:name="android.permission.WRITE_CONTACTS"/& ...
随机推荐
- 【转】windows下安装Python虚拟环境virtualenvwrapper-win
由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv 这个工具,就可以构建一系列虚拟的Python环境 ...
- C++快速文件输入输出
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ C语言可以获得接近汇编的性能,而输入输出常常是最为耗时的过程,因此可以使用 C 语言中的 fre ...
- T型知识实践结构的力量(转载)
最近在做的一些新的事情,这其中获得的一些新的思考. T型的知识积累,深度的挖掘可以通过"举一反三"的应用在广度上,广度可以通过"交叉验证"加强我们的认识,可以说 ...
- Vue 2.0学习(二)数据绑定
Vue实例对象 创建一个vue应用很简单,通过构造函数Vue就能创建一个Vue的根实例: var app = new Vue({ el: '#app', data: { message: 'Hello ...
- 我的sublime text3 配置文件设置
{ "ignored_packages": [ "Vintage" ], //vim模式 "line_padding_bottom": 2, ...
- 小数据池,bytes
'''python2 python3 '''#python2#print() print 'abc'#range() xrange() 生成器# raw_input() #python3#print( ...
- POJ 3735 Training little cats<矩阵快速幂/稀疏矩阵的优化>
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13488 Accepted: ...
- Linux下burg引导
用得比较久了,比grub顺手: 安装: sudo add-apt-repository ppa:n-muench/burg; sudo apt-get update; sudo apt-get ins ...
- 清北学堂学习总结 day1 数据结构 练习
1.二叉搜索树 STL set直接做就可以了 2.树状数组+差分数列: codevs 1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Maste ...
- C# -- 学习笔记之基础篇
由于要做一个系统,需要用到搜索引擎开发的很多知识点.对于开发语言的选择,我一般不是擅长什么才选择什么的,而是通过对比之后,考虑开发时间和难易程度来选择.尽管现在的开发经验还不足,也只能凭借自己弱弱的判 ...