Я читаю имена контактов и телефонные номера из списка контактов на Android. Я успешно читаю имена. Однако, когда я нахожу поиск номера контактного телефона по имени (все это уникально в этом случае, это просто тест), он отлично работает только для одного контакта, не получает номера телефона для других и получает неправильный номер телефона для одного.Чтение контактных телефонов работает для некоторых, а не для других?
Вот код в моем методе getNumbers:
private String getNumber(String name){
String returnMe="";
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null,
"DISPLAY_NAME = '" + getIntent().getStringExtra("name") + "'", null, null);
if(cursor.moveToFirst()){
String identifier = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone._ID + " = " + identifier, null, null);
while(phones.moveToNext()){
returnMe = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
switch(type){
case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
System.out.println("mobile number found"); break;
default:
System.out.println("nothing found."); break;
}
}
}
return returnMe;
}
Рад, что я мог помочь. На самом деле, я думаю, что другой ответ тоже работает и использует только таблицу «Контакты», поэтому это проще. Контакты организованы в 3 таблицы: Контакты, RawContacts и Data. Каждая таблица имеет соответствующий класс, например. ContactsContract.Contacts. Затем вам нужно присоединиться к результатам, используя соответствующие ключи, как это было бы в SQL-запросе. Убедитесь, что вы прочитали документ обо всем, что https://developer.android.com/training/contacts-provider/index.html. –