#android #contacts #contactscontract
#Android #Контакты #contactscontract
Вопрос:
Я знаю, как получить контактные данные для конкретных контактов. Однако я не могу найти способ получить все контакты плюс некоторые их данные в одном запросе. Следующий код возвращает все контакты, имеющие почтовый адрес:
Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
String[] projection = new String[] {
StructuredPostal._ID,
StructuredPostal.LOOKUP_KEY,
StructuredPostal.DISPLAY_NAME,
StructuredPostal.STREET,
StructuredPostal.CITY
};
String sortOrder = StructuredPostal.DISPLAY_NAME " COLLATE LOCALIZED ASC";
Cursor c = getContentResolver().query(uri, projection, null, null, sortOrder);
Но мне нужны все контакты, независимо от того, есть у них почтовый адрес или нет. Это выполнимо с помощью ContatsContract API или мне нужно создать пользовательский запрос внешнего соединения? Есть какие-либо подсказки о том, как это сделать?
Ответ №1:
если у вас есть идентификатор контакта и вы хотите получить почтовый адрес, используйте это :
Uri postal_uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
Cursor postal_cursor = getContentResolver().query(postal_uri,null, ContactsContract.Data.CONTACT_ID "=" contactId.toString(), null,null);
while(postal_cursor.moveToNext())
{
String Strt = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.STREET));
String Cty = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.CITY));
String cntry = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.COUNTRY));
}
postal_cursor.close();
Ответ №2:
Вся контактная информация в Android 2.0 хранится в одной таблице базы данных. Таким образом, вы можете получить всю необходимую информацию в одном запросе:
Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
null, null, null, sortOrder);
Просто выполните итерацию по столбцу данных и проверьте Data.MIMETYPE
. Например, если в этом столбце есть StructuredPostal.CONTENT_ITEM_TYPE
значение, то вы можете получить StructuredPostal
поля из этого столбца.
Комментарии:
1. Действительно, но это требует последующей обработки. Я надеялся получить правильный курсор результата прямо из запроса, чтобы я мог передать его непосредственно в адаптер просмотра списка. Но это тоже подойдет, спасибо за идею!
2. Я думаю, что это старое и больше не действует? Похоже, что теперь номер телефона хранится в другом URI.