我实施了一个代码来检索所有联系人,但它没有显示所有联系人,其中很少有人错过。 这是我的代码:
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
};
Cursor cursor = null;
try {
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection, null, null, null);
} catch (SecurityException e) {
}
if (cursor != null) {
try {
HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>();
int indexOfNormalizedNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
int indexOfDisplayName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
int indexOfDisplayNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
while (cursor.moveToNext()) {
String normalizedNumber = cursor.getString(indexOfNormalizedNumber);
if (normalizedNumbersAlreadyFound.add(normalizedNumber)) {
String displayName = cursor.getString(indexOfDisplayName);
String displayNumber = cursor.getString(indexOfDisplayNumber);
listOfContacts.add(new PhoneContactsModel(displayName, displayNumber, false));
} else {
}
}
Log.d("tag", "size of listOfContacts =1====" + listOfContacts.size());
} finally {
cursor.close();
}
}
不知道发生了什么。请帮帮我。
答案 0 :(得分:0)
代码中存在许多问题:
CommonDataKinds.Phone.CONTENT_URI
表格,所以很自然地,您将无法获得没有电话号码的联系人(例如,姓名和电子邮件的联系人)normalizedNumbersAlreadyFound
中遇到的手机的联系人,因此,如果您有两个联系人使用共享手机(如家庭电话号码),则可能会跳过其中一个。CommonDataKinds.Phone.NORMALIZED_NUMBER
may be null,在这种情况下,您将跳过许多未设置NORMALIZED_NUMBER
字段的联系人如果您还需要包含没有手机的联系人,我建议使用完全不同的代码。如果您只需要与手机联系,我建议您不要依赖NORMALIZED_NUMBER
,而是将CommonDataKinds.Phone.CONTACT_ID
添加到您的预测中,并将其作为每个联系人的唯一密钥。