“query()”返回重复的联系人:Android

时间:2011-01-17 07:56:26

标签: android

Cursor mCursor = getContentResolver().query(Data.CONTENT_URI,
                new String[] {ContactsContract.Contacts.DISPLAY_NAME,
                                ContactsContract.CommonDataKinds.Phone.NUMBER,
                                ContactsContract.Contacts._ID},                     // projection
                null,                       // selection
                null,                       // selectionArgs
                ContactsContract.Contacts.DISPLAY_NAME);            // sortOrder

这是我的查询方法。我不知道为什么它会返回重复的名字(根据Mboile号码,电话号码,工作,家庭等)。如果在联系人列表中有一个人“Person1”有三个联系号码,那么我将获得三行“Person1”,其中包含3个不同的号码。

1 个答案:

答案 0 :(得分:0)

首先尝试查找联系人_id,然后通过_id在Phone中查询。

即:

 mQuerier.startQuery(QUERY_ALL, null, ContactsContract.Contacts.CONTENT_URI,
            CONTACT_PROJECTION, null, null, null);

...

private void startQueryPhones(Item item) {
    Log.d("Start async query phones:" + item.displayName);
    mQuerier.startQuery(QUERY_PHONES, item,
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",
            new String[] { String.valueOf(item.id)}, null); 
}

您将获得一个电话号码列表()。在这里我使用AysncQueryHandler进行查询,但是可以用一个例子来说明。重要的是正确的URI和正确的查询步骤。