首先,我根据名称获取我感兴趣的联系人的ID,然后再次查询CONTACT_ID是我检索到的ID的位置。
所以我的投射和我的where子句是:
String[] projection = new String[] {
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Email.ADDRESS,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
String where = ContactsContract.Data.CONTACT_ID + " = " + id
+ " AND " + ContactsContract.Data.MIMETYPE + " = '" +
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "'"
+ " AND " + ContactsContract.Data.MIMETYPE + " = '" +
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'";
如果我删除了两个 AND 检查中的一个,我在where子句和投影中的相应字段中得到了正确的结果。但对于两者电子邮件和电话都不可能发生。我得到两倍相同的结果。这意味着对于上面的代码,我将获得2倍的电子邮件地址。如果我在Email.ADDRESS之前移动Phone.NUMBER字段,我将获得电话号码的2倍。
查询的代码:
Cursor dCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, where,
null, null);
int nameIdx = dCursor.getColumnIndexOrThrow(ContactsContract.Data.DISPLAY_NAME);
int emailIdx = dCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Email.ADDRESS);
int phoneIdx = dCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);