private void displayAllContactsByType(String accountName) {
Cursor rawCursor = null;
try {
rawCursor = mCProviderClient.query(
ContactsContract.RawContacts.CONTENT_URI,
null,
ContactsContract.RawContacts.ACCOUNT_NAME + "= ?",
new String[]{accountName},
null);
} catch (RemoteException e) {
e.printStackTrace();
}
int contactIdColumn = rawCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID);
Utils.Log("Raw Size", " " + rawCursor.getCount());
while (rawCursor.moveToNext()) {
String contactId = rawCursor.getString(contactIdColumn);
// Utils.Log("contactId ",contactId);
storeContactDetails(contactId);
}
if (contactList != null) {
contactListener = (ContactListener) context;
contactListener.updateView(contactList);
}
}
我获取了原始联系人包含的所有帐户名称。我想让所有的联系人都属于特定的帐户名,但我得到的是null联系人ID。如何获取特定帐户名称的所有联系人ID以及该联系人ID的相应数据?
答案 0 :(得分:2)
首先,RawContacts.CONTACT_ID
的类型为Long
,而不是String
,所以你应该这样做:
Long contactId = rawCursor.getLong(contactIdColumn);
请参阅:https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html#CONTACT_ID不要注意始终为字符串的CONTACT_ID
字段的类型,请查看其下面的Type: INTEGER
。
其次,这种情况很少见,但当RawContact
不属于任何Contact
时,可能会发生这种情况,我称之为僵尸RawContacts
,可以通过损坏的数据库或创建RawContact
时出现错误或故意使用AGGREGATION_MODE
,请参阅AGGREGATION_MODE_DISABLED