[1]data表 data1列里面存的是所有联系人的信息 raw_contact_id 列是用来区分一共有几条联系人信息 mimetype_id 列是用来区分数据类型
[2]row_contacts表 中contact_id就是data表的 raw_contact_id
查询联系人的步骤
[1]先查询row_contacts表 的contact_id列 我们就知道一共有几条联系人
[2]我根据contact_id去查询data表 查询data1列和mimetype
[3]view_data 是由data表和mimetype表的组合
//查询联系人的工具类 public class QueryContactsUtils { public static List<Contact> queryContacts(Context context){ //[0]创建一个集合 List<Contact> contactLists = new ArrayList<Contact>(); //[1]先查询row_contacts表 的contact_id列 我们就知道一共有几条联系人 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); Cursor cursor = context.getContentResolver().query(uri,new String[]{"contact_id"} , null, null, null); while(cursor.moveToNext()){ String contact_id = cursor.getString(0); if (contact_id!=null) { //创建javabean对象 Contact contact = new Contact(); contact.setId(contact_id); System.out.println("contact_id:"+contact_id); //[2]根据contact_id去查询data表 查询data1列和mimetype_id //☆ ☆ ☆ ☆ 当我们在查询data表的时候 其实查询的是view_data的视图 Cursor dataCursor = context.getContentResolver().query(dataUri, new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{contact_id}, null); while(dataCursor.moveToNext()){ String data1 = dataCursor.getString(0); String mimetype = dataCursor.getString(1); //[3]根据mimetype 区分data1列的数据类型 if ("vnd.android.cursor.item/name".equals(mimetype)) { contact.setName(data1); }else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { contact.setPhone(data1); }else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) { contact.setEmail(data1); } } //把javabean对象加入到集合中 contactLists.add(contact); } } return contactLists; } }
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<Contact> queryContacts = QueryContactsUtils.queryContacts(getApplicationContext()); for (Contact contact : queryContacts) { System.out.println("contat:"+contact); } } }
public class Contact { private String id; private String name; private String phone; private String email; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Contact [id=" + id + ", name=" + name + ", phone=" + phone + ", email=" + email + "]"; } }