Android Contacts._ID!= Data.CONTACT_ID

时间:2014-04-01 23:42:52

标签: android android-contacts

我正在针对CommonDataKinds.Phone.CONTENT_URI运行查询,我得到的所有结果都是NOT NULL手机ID。

几乎是代码:

    String[] projection2 = new String[] {
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,          
            ContactsContract.Contacts._ID,                              
            ContactsContract.Contacts.DISPLAY_NAME,             
        };
    String where2 = ContactsContract.CommonDataKinds.Phone._ID + " != ''" ;


    Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            projection2, where2, null, null);

然后我遍历每个游标结果并获取我想要的列。 代码是:

           if (phoneCursor.getCount() > 0) {
            while (phoneCursor.moveToNext()) {
                String contacts_id = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
                String phone_id = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                    Log.i("phonecursor", "contacts_id= "  + contacts_id + " phone_id " + phone_id 
                            +  "  contacts_name= "  + contacts_name + " phone_name= " + phone_name
                            + " Phone= " + phone  );

            }
            phoneCursor.close();
        }

我没有得到的是为什么Phone.CONTACT_ID与同一行的相应Contacts._ID不同...

不应该两者都一样吗?有很多示例使用这些确切的列来运行查询。例如herehere,如果您检查Key指针。

2 个答案:

答案 0 :(得分:24)

ContactsContract.Contacts._ID返回行的唯一ID

this is very good example

and this image

答案 1 :(得分:6)

ContactsContract.Contacts._ID返回行的唯一ID。

现在输出会根据您查询的cursor ContactsContract.Contacts._ID而有所不同。

如果您从ContactsContract.Contacts._ID查询ContactsContract.Contacts.CONTENT_URI,则会ContactsContract.Contacts._IDContactsContract.CommonDataKinds.Phone.CONTACT_ID相同。

但如果您从ContactsContract.Contacts._ID查询ContactsContract.CommonDataKinds.Phone.CONTENT_URI,则ContactsContract.Contacts._IDContactsContract.CommonDataKinds.Phone.CONTACT_ID会有所不同,因为每个电话条目ContactsContract.Contacts._ID都会递增。

因此,如果您需要相同的_ID和Phone._ID,请从ContactsContract.Contacts.CONTENT_URI而不是ContactsContract.CommonDataKinds.Phone.CONTENT_URI查询