欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

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

    • 资源ID:3152481       资源大小:44.07KB        全文页数:25页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    Android入门之增删改查通讯录Android入门之增删改查通讯录 一、通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。 通讯录是ContentProvider的应用,通讯录由两部分组成: (1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider (2)com.android.contacts:运用ContentResolver获取数据的图形用户界面; 二、获取ContactProvider的源代码 Android源代码: 用git获取; 如果要获取ContactProvider,则安装git,并打开git bash,输入 git clone 即可; 目录结构如下: 为何要获取ContactProvider的源代码呢? 因为如果要访问ContentProvider,必须要了解URI的设置;只有查看源代码才能够知道; AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限; html view plaincopyprint? 1. <uses-permission android:name="android.permission.READ_CONTACTS" /> 2. <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 主要的通讯录程序为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)mimetypes:存放数据的类型,比如"vnd.android.cursor.item/name"表示“姓名”类型的数据,"vnd.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/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. if(cursor.moveToFirst) 9. Log.i("Contacts", "name="+cursor.getString(0); 10. 11. = 从(2)查询所有的联系人 java view 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.getContentResolver; 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"); /如果要获得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.getColumnIndex("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 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. else 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 testAddContacts 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表 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 Phone 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(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("authorities",operations);/批量提交 java view plaincopyprint? 1. <span style="font-size:18px;">public void testAddContactsInTransaction throws Exception 2. Uri uri = Uri.parse("content:/com.android.contacts/raw_contacts"); 3. ContentResolver resolver = this.getContext.getContentResolver; 4. ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation> 5. / 向raw_contact表添加一条记录 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/data"); 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. 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. operations.add(operation3); 25. resolver.applyBatch("com.android.contacts", operations); 26. </span> 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.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, "display_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 testUpdatethrows 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(uri, values, "mimetype=? raw_contact_id=?", new String"vnd.android.cursor.item/phone_v2",id+"") 9. and 一、通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。 通讯录是ContentProvider的应用,通讯录由两部分组成: (1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider (2)com.android.contacts:运用ContentResolver获取数据的图形用户界面; 二、获取ContactProvider的源代码 Android源代码: 用git获取; 如果要获取ContactProvider,则安装git,并打开git bash,输入 git clone 即可; 目录结构如下: 为何要获取ContactProvider的源代码呢? 因为如果要访问ContentProvider,必须要了解URI的设置;只有查看源代码才能够知道; AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限; html view plaincopy 1. <span style="font-family:KaiTi_GB2312;font-size:16px;"> <uses-permission android:name="android.permission.READ_CONTACTS" /> 2. <uses-permission android:name="android.permission.WRITE_CONTACTS" /></span> 主要的通讯录程序为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)mimetypes:存放数据的类型,比如"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.parse("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="+cursor.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表 ContentResolver 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.android.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 = cursor2.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. 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. 28. 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)一步一步添加数据 注意:对某个联系人插入姓名、电话等记录时必须要插入Data.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. 17. 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 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_v2"); 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)批量添加数据 核心代码: (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:/com.android.contacts/raw_contacts"); ContentResolver resolver = this.getContext.getContentResolver; ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation> / 向raw_contact表添加一条记录 /此处.withValue("account_name", null)一定要加,不然会抛NullPointerException ContentProviderOperation operation1 = ContentProviderOperation 8. 9. 10. 11. 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的操作的返

    注意事项

    本文(Android入门之增删改查通讯录.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开