安卓四大组建之ContentPrvider之通讯录

通过本章学习利用contentProvider来读取本地手机联系人以及本地SQLite存储。

contentProvider

跨进程共享机制,也就是所谓的跨应用程序。
可以我这个应用程序和别的应用程序共享一个数据库。还可以共享文件等。
系统也有一些自带的contentProvider供我们共享。

contentResolver

访问别人的私有数据库。

Anroid中联系人相关操作

思考问题:
1、联系人数据存储到哪了?
SQlite:一般一个应用程序只操作自己创建的这个私有数据库,不会操作别人的私有数据库。

系统联系人数据库

com.android.provider.contact:安卓内置的应用程序,存储再这个应用程序的私有数据库当中。要想访问这个私有数据库,就要访问他的contentProvider,就可以拿到联系人的相关数据。然后再把联系人数据拿出来。

这里写图片描述

contacts表:
这里写图片描述
该表保存了所有的手机联系人,包括每个联系人id、联系次数(times_contacted)、最后一次联系的时间(last_time_contactde)、是否含有电话号码(has_phone_number)、是否被收藏(starred)等信息。来看看以下字段:
_id :表id,主要用于其他表通过该字段来查找相应的数据。
主键:_id
pohto_id
data表:
这里写图片描述
该表保存了所有创建过的手机联系人的信息保存在列data1至data15中,该表保存了两个ID:mimetype_id和raw_contact_id,从而将data表和raw_contacts表,mimetypes表联系起来了。
mimetype_id(外键字段):存储当前字段属于什么类型(例如5:电话号码、名字)。
raw_contact_id(外键字段):关联联系人 contacts表(分别代表几号人)
data1:具体文字数据(电话、地址、邮箱、姓名)注意:头像不在这里面,因为这里面都是存的字符串。
data15:具体二进制图片数据
mimwtypes表:
这里写图片描述
存储当前字段属于什么类型.
他主要是定义了联系人的数据类型,如果我们想自己定义一个联系人属性需要在这个表中添加,例如:我想扩展添加一个微信号,我们可以这样vnd.android.cursor.item/weichat,可以存储微信号等属性,有兴趣的可以去自己实现一下。
raw_contacts表:
这里写图片描述
主键:_id与contacts表主键id是一样的。与contacts表示一 一对应的关系
该表中的字段比较多,也包含了大量的信息,对于我们实现联系人列表有很大的作用,这里我只调几个字段来看看,其他的可以自己查看:
_id:其他表如contacts,data表可以通过raw_contact_id来查找raw_contacts表中的数据。
contact_id:通过该字段raw_contacts表就可以去查找contacts表,这样两张表就联系起来了。
display_name(display_name_alt):联系人姓名,不用多说。
sort_key:我们在取数据时可以安装该字段来排序。这样我们取到的数据就是排好顺序的。
phone_book_label:联系人首字母,我们可以取得该字段来实现类似微信通讯录联系人的效果。
deleted:该联系人是否被删除。
calls表
通话记录
简介

例如查询刘亦菲的电话:

语句示范:
select XXX from XXX where XXXX
select 查询什么字段 from 哪张表 where 条件

(1)查处刘亦菲的id
select raw_contact_id from data where data1=”刘亦菲”;
(2)查处相应id的电话数据:
方法1:
select data1 from data where raw_contact_id=1 and mimetype_id =5;(raw_contact_id=1为上面查出来的数据)
select data1 from data where raw_contact_id=1 and mimetype_id =8;(raw_contact_id=1为上面查出来的数据)
select data1 from data where raw_contact_id=1 and mimetype_id =1;(raw_contact_id=1为上面查出来的数据)
select data1 from data where raw_contact_id=1 and mimetype_id =7;(raw_contact_id=1为上面查出来的数据)
select data1 from data where raw_contact_id=1 and mimetype_id =10;(raw_contact_id=1为上面查出来的数据)

方法2:
select data1,data15,mimetyp_id from data where raw_contact_id=1 ;
if(mimetyp_id==1){
…….
}else id(mimetyp_id==5){
…….
}

查询所有联系人的信息:

(1)查询所有的联系人,获取每个联系人的id
select _id,photo_id from contacts;
1,5
2,10
3,15
(2)通过每个人的id,查询data表中的其他字段数据(每查出来一条记录,就去data表中去查)
方法1:
select data1,data15 from data where raw_contact_id=1
方法2:
select data1,data15,mimetype_id from data where raw_contact_id=1;
if(mimetype_id==”name”){
}else if(mimetype==”address”){
}

添加联系人:

数据库表关联

举例子:

关于员工信息的数据库表:
emp(id,name,salary,deptId);
1,张三,1000,1
2,李四,1000,1
3,王五,1000,2
部门表:
dept(id,name,location)
1,财务部,北京
2,研发部,上海

查询语句:
select * from emp where name=”李四”;
查询结果(不完整,未显示部门信息):
2,李四,1000,1
查询语句:(再查部门信息)
select * from dept where id=1;
查询结果:
1,财务部,北京

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章