显示姓名,电话,来自Android联系人内容提供商的电子邮件

时间:2014-03-03 18:21:49

标签: android android-contentprovider android-contacts

首先,我根据名称获取我感兴趣的联系人的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);

0 个答案:

没有答案