我正在针对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不同...
答案 0 :(得分:24)
答案 1 :(得分:6)
ContactsContract.Contacts._ID
返回行的唯一ID。
现在输出会根据您查询的cursor
ContactsContract.Contacts._ID
而有所不同。
如果您从ContactsContract.Contacts._ID
查询ContactsContract.Contacts.CONTENT_URI
,则会ContactsContract.Contacts._ID
和ContactsContract.CommonDataKinds.Phone.CONTACT_ID
相同。
但如果您从ContactsContract.Contacts._ID
查询ContactsContract.CommonDataKinds.Phone.CONTENT_URI
,则ContactsContract.Contacts._ID
和ContactsContract.CommonDataKinds.Phone.CONTACT_ID
会有所不同,因为每个电话条目ContactsContract.Contacts._ID
都会递增。
因此,如果您需要相同的_ID和Phone._ID,请从ContactsContract.Contacts.CONTENT_URI
而不是ContactsContract.CommonDataKinds.Phone.CONTENT_URI
查询