Android Contacts._ID!= Data.CONTACT_ID

我正在对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来自同一行…

不应该一样吗? 有很多示例使用这些确切的列来运行查询。 例如, 在这里和这里如果你检查关键指针。

Solutions Collecting From Web of "Android Contacts._ID!= Data.CONTACT_ID"

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

这是很好的例子

和这个图像

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

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

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

但是,如果您从ContactsContract.CommonDataKinds.Phone.CONTENT_URI查询ContactsContract.Contacts._ID ,则您将收到ContactsContract.Contacts._IDContactsContract.CommonDataKinds.Phone.CONTACT_ID因为每个电话条目上的ContactsContract.Contacts._ID都是递增的。

所以,如果你想要相同_ID和Phone._ID然后查询ContactsContract.Contacts.CONTENT_URI而不是ContactsContract.CommonDataKinds.Phone.CONTENT_URI