Объединение контактов и фото таблиц в Android - PullRequest
2 голосов
/ 19 февраля 2012

Я занимаюсь разработкой приложения для телефонной книги.Я пытаюсь получить изображение контакта.Сначала я извлек все контакты, а затем взял каждый contact_id и сделал запрос к таблице фотографий, чтобы получить изображение.Тем не менее, это займет вечность, чтобы запросить все контакты для фото.Как в моем эмуляторе более 1000 контактов, так что более 1000 попаданий на фотостоле запускаются.Итак, есть ли способ объединить две таблицы и получить данные в одном запросе?

Ниже приведен мой код для этого.Но я знаю, что это неправильно.Просто дал ему шанс.Пожалуйста, кто-нибудь исправит это.


    String[] projection = new String[]{Contacts._ID, Contacts.DISPLAY_NAME};
    String joinCondition = "ContactsContract.Contacts._ID=ContactsContract.CommonDataKinds.Photo.CONTACT_ID";
    ContentResolver cr = context.getContentResolver();
    Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
    Uri fillUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
    Cursor cur = cr.query(contactUri, projection,
            joinCondition, null, Contacts.DISPLAY_NAME);

Спасибо!Рахул.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Вы должны получить миниатюру фотографии в методе getView адаптера списка.Это уже оптимизировано, так что вам нужно только обрабатывать записи, которые должны отображаться на экране.Таким образом, самое большее, вам придется запрашивать несколько сообщений одновременно, даже если у вас тысячи контактов.

0 голосов
/ 19 февраля 2012

Вы можете попробовать следующее:

    public final String[] columns = {ContactsContract.Contacts._ID, 
                ContactsContract.Contacts.DISPLAY_NAME,     
                                    ContactsContract.Contacts.PHOTO_THUMBNAIL_URI};

   Cursor c = contentResolver.query(Contacts.CONTENT_URI, columns, where, args, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

это должно вернуть вам курсор со всеми контактами и их изображениями

...