四大组件 — ContentProvider - 手机电话簿

手机电话簿


通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。
通讯录是ContentProvider的应用,通讯录由两部分组成:
(1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider
(2)com.android.contacts:运用ContentResolver获取数据的图形用户界面;


SQLite 数据库表
主    表
表名:raw_contacts
URI :ContactsContract.RawContacts.CONTENT_URI
数据表
表名:data
URI :ContactsContract.Data.CONTENT_URI
类型表
表名:mimetypes
电话:vnd.android.cursor.item/phone_v2
姓名:vnd.android.cursor.item/name
邮件:vnd.android.cursor.item/email_v2
地址:vnd.android.cursor.item/postal-address_v2
组织:vnd.android.cursor.item/organization
照片:vnd.android.cursor.item/photo


Phone表
表名:phone
URI :ContactsContract.CommonDataKinds.Phone.CONTENT_URI


查询
查询 主表中的 id 与 name 两个字段值,phone表中的number值。


查询 主表 数据:
       查询字段:
ID       值:ContactsContract.RawContacts._ID
Name值:ContactsContract.RawContacts.DISPLAY_NAME_ALTERNATIVE


查询 Phone表 数据:
       查询字段:
Number值:ContactsContract.CommonDataKinds.Phone.NUMBER


添加
需要添加 主表id,以及 data表中的各项数据,所以需要用到两个Uri对象。


向 主表添加一个 空数据,从而得到最新 ID。
Uri insert = res.insert(主表, new ContentValues());
long newId = ContentUris.parseId(insert);

向 data数据表 添加姓名
ContentValues nameValue=new ContentValues();
nameValue.put("raw_contact_id", newId);
nameValue.put("mimetype","vnd.android.cursor.item/name");
nameValue.put("data1","用户姓名");
res.insert(uri_data,nameValue);


向 data数据表 添加号码
ContentValues phoneValue = new ContentValues();
phoneValue.put("raw_contact_id", newId);
phoneValue.put("mimetype","vnd.android.cursor.item/phone_v2");
phoneValue.put("data1","手机号码");
res.insert(uri_data, phoneValue);

向 data数据表 添加邮箱
ContentValues emailValue = new ContentValues();
emailValue.put("raw_contact_id", newId);
emailValue.put("mimetype","vnd.android.cursor.item/email_v2");
emailValue.put("data1","邮箱地址");
res.insert(uri_data, emailValue);


删除
因为数据存放在多张表中,并涉及到一对多的关系,所以我们需要先行删除多表中的数据,在删除主表中的数据。


删除 data数据表 中的数据
匹配字段:
ID 值:raw_contact_id
res.delete(uri_data,"raw_contact_id="+pb.getId(),null);


删除 主表 中的数据
ID 值:_id
res.delete(uri_contast,"_id="+pb.getId(),null);


修改





































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值