Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Max_92
25 / 7 / 1
Регистрация: 26.04.2010
Сообщений: 205
1

Как в одном query обращаться к столбцам, принадлежащим к разным контент-провайдерам?

15.03.2014, 13:47. Просмотров 626. Ответов 0
Метки нет (Все метки)

Нужно в ОДНОМ query получить cursor, в который будут включены все имеющиеся контакты, со столбцами Contacts._ID, Contacts.DISPLAY_NAME, CommonDataKinds.Email.ADDRESS, CommonDataKinds.Photo.PHOTO_URI. (заказчик не разрешает использовать несколько курсоров и формировать нормальный ArrayList). Т.е. два последние столбца относятся к другим таблицам и если их включать в projection происходит крэш на вызове getContentResolver().query.
Эти данные можно получить также, если использовать CONTENT_URI, находящийся в таблице Data. Но весь гемор в том, что в этой таблице столбец "DATA1" для одних записей хранит номер телефона, для других - email, в зависимости от значения столбца MIMETYPE. 2 таких записи могут относиться к контакту с одним и тем же "DISPLAY_NAME". Т.е., если использовать запрос:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        String[] projection = new String[] { Data._ID, Data.DISPLAY_NAME,
                Data.DATA1, Data.PHOTO_URI };
 
        String selection = "(" + Data.HAS_PHONE_NUMBER + "=1 AND ("
                + Data.MIMETYPE + "=? OR " + Data.MIMETYPE + "=?)) OR " + "("
                + Data.HAS_PHONE_NUMBER + "=0 AND (" + Data.MIMETYPE + "=?))";
 
        Log.d(LOG_TAG, "MainActivity : " + selection);
 
        return getContentResolver().query(
                Data.CONTEN_URI,
                projection,
                selection,
                new String[] { Email.CONTENT_ITEM_TYPE,
                        Phone.CONTENT_ITEM_TYPE, Email.CONTENT_ITEM_TYPE },
                Data.DISPLAY_NAME);
то в случае если у контакта есть и email и телефон, в курсоре будут ДВЕ таких записи с одинаковыми именами (если проверять наличие у него чего-то одного, то допустим, все контакты у которых email'ов нет в набор НЕ попадут).

Поэтому единственно правильным решением является получение курсора по записям из таблицы Contacts (т.е. использовать Contacts.CONTENT_URI), в которой нет записей с одинаковыми именами (т.к. это готовые контакты, которые агрегируют в себе один или несколько RawContacts). Но как при этом в этом же query получать значения из столбцов CommonDataKinds.Email.ADDRESS, CommonDataKinds.Photo.PHOTO_URI, относящихся к контакту с текущим "_ID" из Contacts ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 13:47
Ответы с готовыми решениями:

Почему в одном background потоке можно обращаться к View-элементам а в другом нет?
Раньше я всегда думал, что в любом потоке, кроме UI, использовать или обращаться к View элементам...

Как из одного метода обращаться к разным TextBox
Имеется метод который в ходе своего выполнения выводит инфу в textbox. А можно ли как то этому...

Как назначить разным программам разные сетевые интерфейсы на одном ПК
Привет всем, у меня такая задача, надо программам указать с какого wlan интерфейса получать...

Группировка по разным столбцам
Доброго дня всем. Помогите, пожалуйста, решить проблему с группировкой. Суть в следующем. Есть бд с...

SEO и динамичный контент на JS +Query +Sammy
Здравствуйте все! Вопрос такой! Сделали сайт http://berserk-web.ru с помощью шаблонизатора...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 13:47

Разбиение слов по разным столбцам
Добрый день. Необходимо разнести данные с одной колонки по разным. Например: Колонка с ФИО...

Суммирование с разбивкой по разным столбцам
Подскажите, как подсчитать суммы по полю Qty по месяцам с разбивкой по разным столбцам в зависимсти...

Как задать в одном текстблоке разным участкам текста разный цвет и шрифт?
Как в C# задать в одном текстблоке разным участкам текста разный цвет и шрифт? Платформа: WP 8.1.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru