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

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

15.03.2014, 13:47. Просмотров 616. Ответов 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 ?
http://www.cyberforum.ru/android-dev/thread2150289.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 13:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как в одном query обращаться к столбцам, принадлежащим к разным контент-провайдерам? (Программирование Android):

Как из одного метода обращаться к разным 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# задать в одном текстблоке разным участкам текста разный цвет и шрифт?...

Циклическое применение одного преобразования к разным столбцам
есть матрица с N числом столбцов. необходимо выполнить вейвлет разложение...

Необходимо расбрасать закодированные данные 1 столбца по разным столбцам.
Я работаю с SQL совсем недавно, до этого только в ACCESS , там было проще....


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

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

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