Android入门之增删改查通讯录Word文件下载.docx
- 文档编号:20823329
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:22
- 大小:163.94KB
Android入门之增删改查通讯录Word文件下载.docx
《Android入门之增删改查通讯录Word文件下载.docx》由会员分享,可在线阅读,更多相关《Android入门之增删改查通讯录Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
表结构如下:
通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有:
(1)raw_contacts:
存放联系人的ID,
_id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值;
display_name属性为姓名;
(2)mimetypes:
存放数据的类型,比如"
vnd.android.cursor.item/name"
表示“姓名”类型的数据,"
vnd.android.cursor.item/phone_v2"
表示“电话”类型的数据;
(3)data:
存放具体的数据;
raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;
我们主要的数据(email、phone等)都存放在data表;
【成都android培训】
data1属性存放总数据;
data2属性:
-如果此记录存放姓名,则data2存放名;
-如果此记录存放电话,则data2存放类型,比如手机、家电;
-如果此记录存放组织,则data2存放类型,比如公司、其他;
-如果此记录存放地址,则data2存放类型,比如住宅,单位等;
四、对通信录做增删改查
简单的说:
对通讯录操作就是对一个普通的ContentProvider操作;
1.Query
(1)根据电话号码查询姓名
[java]
1.//根据电话号码查询姓名(在一个电话打过来时,如果此电话在通讯录中,则显示姓名)
2.public
void
testReadNameByPhone(){
3.Stringphone=
"
12345678"
;
4.//uri=content:
//com.android.contacts/data/phones/filter/#
5.Uriuri=Uri.parse("
content:
//com.android.contacts/data/phones/filter/"
+phone);
6.ContentResolverresolver=
this.getContext().getContentResolver();
7.Cursorcursor=resolver.query(uri,
new
String[]{Data.DISPLAY_NAME},
null,
null);
//从raw_contact表中返回display_name
8.if(cursor.moveToFirst()){
9.Log.i("
Contacts"
+cursor.getString(0));
10.}
11.}
(2)查询所有的联系人
1.//读取通讯录的全部的联系人
2.//需要先在raw_contact表中遍历id,并根据id到data表中获取数据
3.public
testReadAll(){
4.//uri=content:
//com.android.contacts/contacts
//com.android.contacts/contacts"
);
//访问raw_contacts表
String[]{Data._ID},
//获得_id属性
8.while(cursor.moveToNext()){
9.StringBuilderbuf=
StringBuilder();
10.int
id=cursor.getInt(0);
//获得id并且在data中寻找数据
11.buf.append("
id="
+id);
12.uri=Uri.parse("
//com.android.contacts/contacts/"
+id+"
/data"
//如果要获得data表中某个id对应的数据,则URI为content:
//com.android.contacts/contacts/#/data
13.Cursorcursor2=resolver.query(uri,
String[]{Data.DATA1,Data.MIMETYPE},
null,null,
//data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等
14.while(cursor2.moveToNext()){
15.Stringdata=cursor2.getString(cursor2.getColumnIndex("
data1"
));
16.if(cursor2.getString(cursor2.getColumnIndex("
mimetype"
)).equals("
)){
//如果是名字
17.buf.append("
name="
+data);
18.}
19.else
if(cursor2.getString(cursor2.getColumnIndex("
//如果是电话
20.buf.append("
phone="
21.}
22.else
vnd.android.cursor.item/email_v2"
//如果是email
23.buf.append("
email="
24.}
25.else
vnd.android.cursor.item/postal-address_v2"
)){//如果是地址
26.buf.append("
address="
27.}
28.else
vnd.android.cursor.item/organization"
//如果是组织
29.buf.append("
organization="
30.}
31.}
32.Stringstr=buf.toString();
33.Log.i("
str);
34.}
35.}
2.Insert
(1)一步一步添加数据
1.//一步一步添加数据
testAddContacts(){
3.//插入raw_contacts表,并获取_id属性
4.Uriuri=Uri.parse("
//com.android.contacts/raw_contacts"
5.ContentResolverresolver=
6.ContentValuesvalues=
ContentValues();
7.long
contact_id=ContentUris.parseId(resolver.insert(uri,values));
8.//插入data表
9.uri=Uri.parse("
//com.android.contacts/data"
10.//addName
11.values.put("
raw_contact_id"
contact_id);
12.values.put(Data.MIMETYPE,"
13.values.put("
data2"
zdong"
14.values.put("
xzdong"
15.resolver.insert(uri,values);
16.values.clear();
17.//addPhone
18.values.put("
19.values.put(Data.MIMETYPE,"
20.values.put("
2"
//手机
21.values.put("
87654321"
22.resolver.insert(uri,values);
23.values.clear();
24.//addemail
25.values.put("
26.values.put(Data.MIMETYPE,"
27.values.put("
//单位
28.values.put("
xzdong@"
29.resolver.insert(uri,values);
(2)批量添加数据
核心代码:
(1)ContentProviderOperationoperation=ContentProviderOperation.newInsert(uri).withValue("
key"
"
value"
).build();
(2)resolver.applyBatch("
authorities"
operations);
//批量提交
spanstyle="
font-size:
18px;
>
public
testAddContactsInTransaction()
throws
Exception{
2.Uriuri=Uri.parse("
3.ContentResolverresolver=
4.ArrayList<
ContentProviderOperation>
operations=
ArrayList<
();
5.//向raw_contact表添加一条记录
6.//此处.withValue("
account_name"
null)一定要加,不然会抛NullPointerException
7.ContentProviderOperationoperation1=ContentProviderOperation
8..newInsert(uri).withValue("
null).build();
9.operations.add(operation1);
10.//向data添加数据
11.uri=Uri.parse("
12.//添加姓名
13.ContentProviderOperationoperation2=ContentProviderOperation
14..newInsert(uri).withValueBackReference("
0)
15.//withValueBackReference的第二个参数表示引用operations[0]的操作的返回id作为此值
16..withValue("
)
17..withValue("
18.operations.add(operation2);
19.//添加手机数据
20.ContentProviderOperationoperation3=ContentProviderOperation
21..newInsert(uri).withValueBackReference("
22..withValue("
23..withValue("
).withValue("
0000000"
24.operations.add(operation3);
25.resolver.applyBatch("
com.android.contacts"
operations);
26.}<
/span>
3.Delete
核心思想:
(1)先在raw_contacts表根据姓名查出id;
(2)在data表中只要raw_contact_id匹配的都删除;
1.public
testDelete()throws
Exception{
2.Stringname=
3.//根据姓名求id
6.Cursorcursor=resolver.query(uri,
String[]{Data._ID},"
display_name=?
String[]{name},
7.if(cursor.moveToFirst()){
8.int
9.//根据id删除data中的相应数据
10.resolver.delete(uri,
String[]{name});
12.resolver.delete(uri,
raw_contact_id=?
String[]{id+"
});
13.}
14.}
4.Update
(1)不需要更新raw_contacts,只需要更新data表;
(2)uri=content:
//com.android.contacts/data表示对data表进行操作;
testUpdate()throws
2.int
id=
1;
999999"
//对data表的所有数据操作
7.values.put("
phone);
8.resolver.update(uri,values,
mimetype=?
andraw_contact_id=?
String[]{"
id+"
})
9.}
viewplaincopy
span
style="
font-family:
KaiTi;
16px;
<
2.
主要的通讯录程序为ContactsProvider2.java
authorities=contacts或com.android.contacts;
四、编程提示
URI
对raw_contacts表添加、删除、更新操作:
URI=
//com.android.contacts/raw_contacts;
对data表添加、删除、更新操作:
//com.android.contacts/data;
根据email对data表查询
URI=
conte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 入门 增删 通讯录