Android入门之增删改查通讯录.docx

上传人:小飞机 文档编号:3152481 上传时间:2023-03-11 格式:DOCX 页数:25 大小:44.07KB
返回 下载 相关 举报
Android入门之增删改查通讯录.docx_第1页
第1页 / 共25页
Android入门之增删改查通讯录.docx_第2页
第2页 / 共25页
Android入门之增删改查通讯录.docx_第3页
第3页 / 共25页
Android入门之增删改查通讯录.docx_第4页
第4页 / 共25页
Android入门之增删改查通讯录.docx_第5页
第5页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Android入门之增删改查通讯录.docx》由会员分享,可在线阅读,更多相关《Android入门之增删改查通讯录.docx(25页珍藏版)》请在三一办公上搜索。

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

2、id源代码: 用git获取; 如果要获取ContactProvider,则安装git,并打开git bash,输入 git clone 即可; 目录结构如下: 为何要获取ContactProvider的源代码呢? 因为如果要访问ContentProvider,必须要了解URI的设置;只有查看源代码才能够知道; AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限; html view plaincopyprint? 1. 2. 主要的通讯录程序为ContactsProvider2.java,authoriti

3、es为:contacts或com.android.contacts; 三、通讯录数据库结构介绍 表结构如下: 通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有: (1)raw_contacts:存放联系人的ID, _id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值; display_name属性为姓名; (2)mimetypes:存放数据的类型,比如vnd.android.cursor.item/name表示“姓名”类型的数据,vn

4、d.android.cursor.item/phone_v2表示“电话”类型的数据; (3)data:存放具体的数据; raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;我们主要的数据 2. public void testReadNameByPhone 3. 4. 5. 6. 7. String phone = 12345678; /uri= content:/com.android.contacts/data/phones/filter/# Uri uri = Uri.parse(content:/com.android.contacts/dat

5、a/phones/filter/+phone); ContentResolver resolver = this.getContext.getContentResolver; Cursor cursor resolver.query(uri, new StringData.DISPLAY_NAME, null, null, null); /raw_contact表中返回display_name 8. if(cursor.moveToFirst) 9. Log.i(Contacts, name=+cursor.getString(0); 10. 11. = 从(2)查询所有的联系人 java v

6、iew plaincopyprint? 1. /读取通讯录的全部的联系人 2. /需要先在raw_contact表中遍历id,并根据id到data表中获取数据 3. public void testReadAll 4. /uri = content:/com.android.contacts/contacts 5. Uri uri = Uri.parse(content:/com.android.contacts/contacts); /访问raw_contacts表 6. ContentResolver resolver = this.getContext.getContentResolve

7、r; 7. Cursor cursor = resolver.query(uri, new StringData._ID, null, null, null); /获得_id属性 8. while(cursor.moveToNext) 9. StringBuilder buf = new StringBuilder; 10. int id = cursor.getInt(0);/获得id并且在data中寻找数据 11. buf.append(id=+id); 12. uri = Uri.parse(content:/com.android.contacts/contacts/+id+/data

8、); /如果要获得data表中某个id对应的数据,则URI为content:/com.android.contacts/contacts/#/data 13. Cursor cursor2 = resolver.query(uri, new StringData.DATA1,Data.MIMETYPE, null,null, null); /data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等 14. while(cursor2.moveToNext) 15. String data = cursor2.getString(cursor2.getColumnIn

9、dex(data1); 16. if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/name) /如果是名字 17. buf.append(,name=+data); 18. 19. else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/phone_v2) /如果是电话 20. buf.append(,phone=+data); 21. 22. else

10、 if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/email_v2) /如果是email 23. buf.append(,email=+data); 24. 25. else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/postal-address_v2)/如果是地址 26. buf.append(,address=+data); 27. 28. e

11、lse if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/organization) /如果是组织 29. buf.append(,organization=+data); 30. 31. 32. String str = buf.toString; 33. Log.i(Contacts, str); 34. 35. 2.Insert (1)一步一步添加数据 java view plaincopyprint? 1. /一步一步添加数据 2. public void testA

12、ddContacts 3. /插入raw_contacts表,并获取_id属性 4. Uri uri = Uri.parse(content:/com.android.contacts/raw_contacts); 5. ContentResolver resolver = this.getContext.getContentResolver; 6. ContentValues values = new ContentValues; 7. long contact_id = ContentUris.parseId(resolver.insert(uri, values); 8. /插入data

13、表 9. uri = Uri.parse(content:/com.android.contacts/data); 10. /add Name 11. values.put(raw_contact_id, contact_id); 12. values.put(Data.MIMETYPE,vnd.android.cursor.item/name); 13. values.put(data2, zdong); 14. values.put(data1, xzdong); 15. resolver.insert(uri, values); 16. values.clear; 17. /add Ph

14、one 18. values.put(raw_contact_id, contact_id); 19. values.put(Data.MIMETYPE,vnd.android.cursor.item/phone_v2); 20. values.put(data2, 2); /手机 21. values.put(data1, 87654321); 22. resolver.insert(uri, values); 23. values.clear; 24. /add email 25. values.put(raw_contact_id, contact_id); 26. values.put

15、(Data.MIMETYPE,vnd.android.cursor.item/email_v2); 27. values.put(data2, 2); /单位 28. values.put(data1, xzdong); 29. resolver.insert(uri, values); 30. (2)批量添加数据 核心代码: (1)ContentProviderOperation operation = ContentProviderOperation.newInsert(uri).withValue(key,value).build; (2)resolver.applyBatch(auth

16、orities,operations);/批量提交 java view plaincopyprint? 1. public void testAddContactsInTransaction throws Exception 2. Uri uri = Uri.parse(content:/com.android.contacts/raw_contacts); 3. ContentResolver resolver = this.getContext.getContentResolver; 4. ArrayList operations = new ArrayList; 5. / 向raw_co

17、ntact表添加一条记录 6. /此处.withValue(account_name, null)一定要加,不然会抛NullPointerException 7. ContentProviderOperation operation1 = ContentProviderOperation 8. .newInsert(uri).withValue(account_name, null).build; 9. operations.add(operation1); 10. / 向data添加数据 11. uri = Uri.parse(content:/com.android.contacts/da

18、ta); 12. /添加姓名 13. ContentProviderOperation operation2 = ContentProviderOperation 14. .newInsert(uri).withValueBackReference(raw_contact_id, 0) 15. /withValueBackReference的第二个参数表示引用operations0的操作的返回id作为此值 16. .withValue(mimetype, vnd.android.cursor.item/name) 17. .withValue(data2, xzdong).build; 18.

19、 operations.add(operation2); 19. /添加手机数据 20. ContentProviderOperation operation3 = ContentProviderOperation 21. .newInsert(uri).withValueBackReference(raw_contact_id, 0) 22. .withValue(mimetype, vnd.android.cursor.item/phone_v2) 23. .withValue(data2, 2).withValue(data1, 0000000).build; 24. operation

20、s.add(operation3); 25. resolver.applyBatch(com.android.contacts, operations); 26. 3.Delete 核心思想: (1)先在raw_contacts表根据姓名查出id; (2)在data表中只要raw_contact_id匹配的都删除; java view plaincopyprint? 1. public void testDeletethrows Exception 2. String name = xzdong; 3. /根据姓名求id 4. Uri uri = Uri.parse(content:/com.

21、android.contacts/raw_contacts); 5. ContentResolver resolver = this.getContext.getContentResolver; 6. Cursor cursor = resolver.query(uri, new StringData._ID,display_name=?, new Stringname, null); 7. if(cursor.moveToFirst) 8. int id = cursor.getInt(0); 9. /根据id删除data中的相应数据 10. resolver.delete(uri, dis

22、play_name=?, new Stringname); 11. uri = Uri.parse(content:/com.android.contacts/data); 12. resolver.delete(uri, raw_contact_id=?, new Stringid+); 13. 14. 4.Update 核心思想: (1)不需要更新raw_contacts,只需要更新data表; (2)uri=content:/com.android.contacts/data 表示对data表进行操作; java view plaincopyprint? 1. public void t

23、estUpdatethrows Exception 2. int id = 1; 3. String phone = 999999; 4. Uri uri = Uri.parse(content:/com.android.contacts/data);/对data表的所有数据操作 5. ContentResolver resolver = this.getContext.getContentResolver; 6. ContentValues values = new ContentValues; 7. values.put(data1, phone); 8. resolver.update(

24、uri, values, mimetype=? raw_contact_id=?, new Stringvnd.android.cursor.item/phone_v2,id+) 9. and 一、通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。 通讯录是ContentProvider的应用,通讯录由两部分组成: (1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider (2)com.android.contac

25、ts:运用ContentResolver获取数据的图形用户界面; 二、获取ContactProvider的源代码 Android源代码: 用git获取; 如果要获取ContactProvider,则安装git,并打开git bash,输入 git clone 即可; 目录结构如下: 为何要获取ContactProvider的源代码呢? 因为如果要访问ContentProvider,必须要了解URI的设置;只有查看源代码才能够知道; AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限; html view p

26、laincopy 1. 2. 主要的通讯录程序为ContactsProvider2.java authorities=contacts或com.android.contacts; 三、通讯录数据库结构介绍 表结构如下: 通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有: (1)raw_contacts:存放联系人的ID, _id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值; display_name属性为姓名; (2)mimetyp

27、es:存放数据的类型,比如vnd.android.cursor.item/name表示“姓名”类型的数据,vnd.android.cursor.item/phone_v2表示“电话”类型的数据; (3)data:存放具体的数据; raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;我们主要的数据 public void testReadNameByPhone String phone = 12345678; /uri= content:/com.android.contacts/data/phones/filter/# Uri uri = Uri.pa

28、rse(content:/com.android.contacts/data/phones/filter/+phone); ContentResolver resolver = this.getContext.getContentResolver; Cursor cursor = resolver.query(uri, new StringData.DISPLAY_NAME, null, null, null); /从raw_contact表中返回display_name 8. 9. 10. 11. if(cursor.moveToFirst) Log.i(Contacts, name=+cu

29、rsor.getString(0); (2)查询所有的联系人 java view plaincopy 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. /读取通讯录的全部的联系人 /需要先在raw_contact表中遍历id,并根据id到data表中获取数据 public void testReadAll /uri = content:/com.android.contacts/contacts Uri uri = Uri.parse(content:/com.android.contacts/contacts); /访问raw_contacts表 ContentR

30、esolver resolver = this.getContext.getContentResolver; Cursor cursor = resolver.query(uri, new StringData._ID, null, null, null); /获得_id属性 while(cursor.moveToNext) StringBuilder buf = new StringBuilder; int id = cursor.getInt(0);/获得id并且在data中寻找数据 buf.append(id=+id); uri = Uri.parse(content:/com.andr

31、oid.contacts/contacts/+id+/data); /如果要获得data表中某个id对应的数据,则URI为content:/com.android.contacts/contacts/#/data 13. Cursor cursor2 = resolver.query(uri, new StringData.DATA1,Data.MIMETYPE, null,null, null); /data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等 14. 15. 16. while(cursor2.moveToNext) String data = cu

32、rsor2.getString(cursor2.getColumnIndex(data1); if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/name) /如果是名字 17. 18. buf.append(,name=+data); 19. else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/phone_v2) /如果是电话 20. 21. 22.

33、 buf.append(,phone=+data); else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/email_v2) /如果是email 23. 24. 25. buf.append(,email=+data); else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/postal-address_v2) /如果是地址 26. 27. 2

34、8. buf.append(,address=+data); else if(cursor2.getString(cursor2.getColumnIndex(mimetype).equals(vnd.android.cursor.item/organization) /如果是组织 29. 30. 31. 32. 33. 34. 35. buf.append(,organization=+data); String str = buf.toString; Log.i(Contacts, str); 2.Insert (1)一步一步添加数据 注意:对某个联系人插入姓名、电话等记录时必须要插入Da

35、ta.MIMETYPE属性,而不是插入mimetype_id! 比如:values.put(Data.MIMETYPE,vnd.android.cursor.item/phone_v2); java view plaincopy 1. 2. 3. 4. /一步一步添加数据 public void testAddContacts /插入raw_contacts表,并获取_id属性 Uri uri = Uri.parse(content:/com.android.contacts/raw_contacts); 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1

36、7. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ContentResolver resolver = this.getContext.getContentResolver; ContentValues values = new ContentValues; long contact_id = ContentUris.parseId(resolver.insert(uri, values); /插入data表 uri = Uri.parse(content:/com.android.contacts/data); /add Name

37、values.put(raw_contact_id, contact_id); values.put(Data.MIMETYPE,vnd.android.cursor.item/name); values.put(data2, zdong); values.put(data1, xzdong); resolver.insert(uri, values); values.clear; /add Phone values.put(raw_contact_id, contact_id); values.put(Data.MIMETYPE,vnd.android.cursor.item/phone_v

38、2); values.put(data2, 2); /手机 values.put(data1, 87654321); resolver.insert(uri, values); values.clear; /add email values.put(raw_contact_id, contact_id); values.put(Data.MIMETYPE,vnd.android.cursor.item/email_v2); values.put(data2, 2); /单位 values.put(data1, xzdong); resolver.insert(uri, values); (2)

39、批量添加数据 核心代码: (1)ContentProviderOperation operation = ContentProviderOperation.newInsert(uri).withValue(key,value).build; (2)resolver.applyBatch(authorities,operations);/批量提交 java view plaincopy 1. 2. 3. 4. 5. 6. 7. public void testAddContactsInTransaction throws Exception Uri uri = Uri.parse(content

40、:/com.android.contacts/raw_contacts); ContentResolver resolver = this.getContext.getContentResolver; ArrayList operations = new ArrayList; / 向raw_contact表添加一条记录 /此处.withValue(account_name, null)一定要加,不然会抛NullPointerException ContentProviderOperation operation1 = ContentProviderOperation 8. 9. 10. 11.

41、 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. .newInsert(uri).withValue(account_name, null).build; operations.add(operation1); / 向data添加数据 uri = Uri.parse(content:/com.android.contacts/data); /添加姓名 ContentProviderOperation operation2 = ContentProviderOperation .newInsert(uri).withValueBackReference(raw_contact_id, 0) /withValueBackReference的第二个参数表示引用operations0的操作的返

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号