显示来自Android联系人内容提供商的姓名、电话、电子邮件
首先,我根据姓名获取我感兴趣的联系人的id,然后再次查询联系人的id是我检索到的id 所以我的投影和where子句是:显示来自Android联系人内容提供商的姓名、电话、电子邮件,android,android-contentprovider,android-contacts,Android,Android Contentprovider,Android Contacts,首先,我根据姓名获取我感兴趣的联系人的id,然后再次查询联系人的id是我检索到的id 所以我的投影和where子句是: String[] projection = new String[] { ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.ADDRESS,
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 + "'";
如果我从投影中删除where子句和相应字段上的两个和检查中的一个,我将得到正确的结果。但是对于而言,电子邮件和电话都是不可能发生的。我得到了两倍相同的结果。这意味着对于上面的代码,我将得到2倍的电子邮件地址。如果我将Phone.NUMBER字段移到Email.ADDRESS之前,我将得到电话号码的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);
你找到解决办法了吗?我也有同样的问题。提前感谢:)