getContentResolver()内容解析者查询联系人、插入联系人
首先,我们需要知道的两个Uri:
1、Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查到data表中raw_contact_id
2、Uri uri1 = Uri.parse("content://com.android.contacts/data");
想取数据库里面的信息,就必须要知道表的结构我们看一下view_data表:
我们只需要关心下面三列数据:
从表中我们可以看出,Google将联系人信息放在了一列中,也就是data1列,根据raw_contact_id来区分是否为同一个人的信息,根据mimetype区分联系人信息中的name、phone、email,所以首先我们要获得的是raw_contact_id,但是view_data表中的raw_contact_id是重复的。
下面我们再来看一张表raw_contacts:
从这张表中,我们可以获得联系人的raw_contact_id,也就可以获得联系人的个数,然后通过raw_contact_id获取每个联系人。
表的结构了解了,下面我们来看代码:
public void readContacts(){ String name = null; String phone= null; String eMail= null; Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri uri1 = Uri.parse("content://com.android.contacts/data"); Cursor cursor = getContentResolver().query(uri,new String[]{"contact_id"},null,null,null); while (cursor.moveToNext()){ String contacts_id = cursor.getString(0); //System.out.println("contact_id :"+contacts_id); if (contacts_id!=null){ /** * projection 第二个参数,要查询的列,为null则是查询所有的列 * selection 第三个参数,根据什么条件查询 * selectionArgs 第四个参数,根据什么查的参数 * */ Cursor cursor1 = getContentResolver().query(uri1,new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contacts_id},null); while (cursor1.moveToNext()){ String data1 = cursor1.getString(0); String mimetype = cursor1.getString(1); //System.out.println("data1:"+data1+"--"+"mimetype:"+mimetype); if (mimetype.equals("vnd.android.cursor.item/name")){ name = data1; }else if (mimetype.equals("vnd.android.cursor.item/phone_v2")){ phone = data1; }else if (mimetype.equals("vnd.android.cursor.item/email_v2")){ eMail = data1; } } System.out.println("name:"+name+"- phone:"+phone+" -email:"+eMail); } } }
记得加权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
从代码中,我们可以看的很清楚,先获取raw_contact_id,然后通过他,获取data1和mimetype,然后通过mimetype知道data1中的数据是name、phone或者email。
ps:其实解析data表就是解析view_data
下面是插入联系人:
看代码:
public void insertContacts(){ Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri uri1 = Uri.parse("content://com.android.contacts/data"); Cursor cursor = getContentResolver().query(uri,null,null,null,null); int count = cursor.getCount(); int count_id = count+1; ContentValues values = new ContentValues(); values.put("contact_id",count_id); getContentResolver().insert(uri,values); ContentValues contactValue = new ContentValues(); contactValue.put("data1","张三"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/name"); getContentResolver().insert(uri1,contactValue); contactValue.clear();//插完之后记得clear contactValue.put("data1","133333333"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/phone_v2"); getContentResolver().insert(uri1,contactValue); contactValue.clear(); contactValue.put("data1","478569@qq.com"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/email_v2"); getContentResolver().insert(uri1,contactValue); contactValue.clear(); }
基本思路,先从raw_contact表中获取当前联系人的个数,然后在加上1之后插入联系人,
getContentResolver()内容解析者查询联系人、插入联系人的更多相关文章
- android102 查询,插入联系人
package com.itheima.getcontacts; import com.itheima.getcontacts.domain.Contact; import android.net.U ...
- Android 之内容提供者 内容解析者 内容观察者
contentProvider:ContentProvider在Android中的作用是对外提供数据,除了可以为所在应用提供数据外,还可以共享数据给其他应用,这是Android中解决应用之间数据共享的 ...
- JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能
主要内容: JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...
- IdentityServer4源码解析_5_查询用户信息接口
协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息.请求UserInfo接口需要使用通行令牌.响应报文通常是json数据格式,包含了一组claim键 ...
- gradle相关配置内容解析
gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...
- 使用PDO连接数据库 查询和插入乱码的解决方法
问题:PDO连接数据库后,查询和插入中文到数据库,出现乱码,如图: 解决方法: 法1: try{ $opts_values = array(PDO::MYSQL_ATTR_INIT_COMMAND=& ...
- 把一个select查询结果插入到一个表(可选指定字段和值实例)
把一个select查询结果插入到一个表(可选指定字段和值实例) insert into bak (cc,yf) select cc,9 from ket insert into bak (cc,yf ...
- 写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接内容的本地查询
始出处:http://www.cnblogs.com/Charltsing/p/APIViewer.html QQ:564955427,QQ群:550672198 世面上的API Viewer已经不少 ...
- Oracle Blob查询和插入
注:本文来源于<Oracle Blob查询和插入> 插入 UPDATE cmm05 SET OUTFILE = to_blob('12345690'): 查询: SELECT utl_ra ...
随机推荐
- CentOS下安装Mysql数据库
其实,安装mysql数据库还是比较容易的,安装方式可以分为源码安装和二进制包安装.安装简单,只需要 yum安装几个包就可以搞定,安装后续其实还需要简单做些工作,才可以使用. 环境:CentOS 6.5 ...
- 利用NuSoap开发WebService(PHP)
利用NuSoap开发WebService(PHP) 分类: php 2010-09-08 12:00 5005人阅读 评论(1) 收藏 举报 webservicephpsoapstringencodi ...
- ELF Format 笔记(二)—— ELF Header
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 以 32 位的 ELF header 数据结构为例: #define EI_NIDENT 16 typede ...
- LINUX下NFS系统的安装配置
准备:NFS系统服务器IP 192.168.135.1 ,NFS共享目录/mnt/NFS 一.安装NFS 查看nfs是否安装 #rpm -qa | grep nfs 若没有则安装nfs包 #yum i ...
- TCMalloc 对MYSQL 性能 优化的分析
虽然经过研究发现TCMalloc不适合我们现有的游戏框架,但意外收获发现TCMalloc可以大幅度提高MYSQL 性能及内存占用,这里给出配置及测试的结果: 1.配置 关于TCMalloc的安装,在& ...
- 云计算之路-阿里云上:RDS用户的烦恼
http://www.cnblogs.com/cmt/p/3586029.html *博主注:阿里云数据库真的这么可笑?
- maven学习(一)
Maven这个词可以翻译为:知识的积累,也可以翻译为“专家”,“内行”.maven主要服务于鲫鱼java平台的项目构建.依赖管理和项目信息管理.无论是小型的开源类库项目,还是大型的企业级应用,无乱是传 ...
- 用ccproxy + stunnel做个加密代理
https://www.stunnel.org/downloads.html ccproxy + stunnel做个加密http代理和socks5代理 目前国内用户无法访问某些国外网站,如http:/ ...
- 转:导出/导入Eclipse的workspace配置(备份Eclipse配置)
from: http://www.cnblogs.com/52php/p/5677647.html 设置好workspace配置后可以将配置保存为 *.epf 文件. 进入 File -> Ex ...
- Entity Framework Code Migration 新建、更新数据库
在Package Manager Console中执行 A:新建数据库: 1.Add-Migration init[名称](为挂起的Model变化添加迁移脚本) 2.Update-Database(将 ...