Android入门之增删改查通讯录.docx
《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.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 入门 增删 通讯录
链接地址:https://www.31ppt.com/p-3152481.html