主要就是用 内容解析者来处理问题:

首先应该先清楚Android手机联系人的数据库:读取主要用了3张表:

Table Name 作用
contacts 记录联系人id,(有几列即表示有几个联系人)
mimeTypes 存储类型比对(为了节省数据库的空间)
data 联系人信息保存在此表中

但是在查的过程中,第一次我们是查的表contacts,第二次我们查的是view_data这个视图

查询过程中,第一循环有几个联系人就执行几次,但是第二次循环每个联系人最多执行11次,依据你的联系人存储信息不同而不同的

一段代码飘过:

  1. ContentResolver contentResolver = getContentResolver();
  2. // 用cursor对象查询
  3. Cursor cursor = contentResolver.query(Uri
  4. .parse("content://com.android.contacts/raw_contacts"),
  5. new String[] { "contact_id" }, null, // 查询条件 "a=?"
  6. null, // 提供问号的值
  7. null);
  8. // 循环游标
  9. while (cursor.moveToNext()) {
  10. // cursor的索引值从0开始的
  11. String id = cursor.getString(0);
  12. // 根据唯一性id值,查询data表和mimetype生成的视图,获取data以及mimetype字段
  13. Cursor indexCursor = contentResolver.query(
  14. Uri.parse("content://com.android.contacts/data"),
  15. new String[] { "data1", "mimetype" },
  16. "raw_contact_id=?", new String[] { id }, null);
  17. // 5 循环遍历游标的值 查询过程还是不太清楚
  18. HashMap<String, String> hm = new HashMap<String, String>();
  19. while (indexCursor.moveToNext()) {
  20. // System.out.println(indexCursor.getString(0) +" "+ indexCursor.getString(1));
  21. hm.put(indexCursor.getString(1),indexCursor.getString(0));
  22. }
  23. contactList.add(hm);
  24. indexCursor.close();
  25. }
  26. // 关闭游标
  27. cursor.close();
  28. //子线程里发送更新ui的数据
  29. Message msg = new Message();
  30. msg.what = 1;
  31. mHandler.sendMessage(msg);

 

版权声明:本文为zzl521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zzl521/p/8945251.html