Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 61252
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,124
новичок: alejka
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса обработки заданий на вычислительном центре на GP...
Диплом RSA, ЭЦП, сертификаты, шифрование на C#
Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Агрегированные контакты
Когда множество учетных записей имеют один и тот же контакт, может понадобиться отобразить только одно имя, а не повторяющиеся или похожие имена для всех учетных записей. Это делается в Android путем агрегирования контактов в представление, предназначенное только для чтения. Android сохраняет эти агрегированные контакты в таблице по имени contacts. Для заполнения или модификации этой таблицы используются триггеры на таблицах raw_contacts и data.
Перед началом объяснения логики, стоящей за агрегированием, давайте рассмотрим определение таблицы contacts.
Клиенты не обновляют эту таблицу напрямую. После добавления низкоуровневого контакта с сопутствующими деталями Android выполняет поиск других низкоуровневых контактов на предмет выявления похожих. Если таковой найден, Android будет использовать идентификатор агрегированного контакта из обнаруженного низкоуровневого контакта в качестве идентификатора агрегированного контакта для только что добавленного низкоуровневого контакта. В таблице агрегированных контактов новая запись не создается. Если похожих контактов не найдено, Android создаст агрегированный контакт и укажет его идентификатор в добавляемом низкоуровневом контакте.
Для определения подобия между низкоуровневыми контактами Android использует следующий алгоритм.
. Два низкоуровневых контакта имеют совпадающие имена (т.е. имена и фамилии).
. Слова в имени встречаются те же самые, но в разном порядке, например, “имя фамилия”, “имя, фамилия”, “ фамилия, имя”.
. Совпадают сокращенные версии имен, например, “Bob” для “Robert”.
. Если один из низкоуровневых контактов имеет только имя или фамилию, запускается поиск по другим атрибутам, таким как телефонный номер или адрес электронной почты, и в случае нахождения совпадения контакт будет агрегирован.
. Если в одном из низкоуровневых контактов имя или фамилия вообще не указаны, также запускается поиск по другим атрибутам, как на шаге.
Поскольку эти правила являются эвристическими, некоторые контакты могут быть агрегированы ошибочно. Клиентские приложения должны предоставлять механизм для разделения контактов в таких случаях. Обратившись к руководству пользователя Android, легко выяснить, что стандартное приложение по работе с контактами позволяет разделять контакты, если они были объединены по ошибке.
Можно также запретить агрегирование, устанавливая режим агрегирования при вставке низкоуровневого контакта.
Первая константа (AGGREGATION_MODE_DEFAULT) очевидна; она устанавливает нормальную работу агрегирования.
Вторая константа (AGGREGATION_MODE_DISABLED) отключает агрегирование для данного низкоуровневого контакта. Даже если он уже агрегирован, Android изымет его из агрегации и создаст новый идентификатор агрегированного контакта, специально выделенный для этого низкоуровневого контакта.
Третья константа (AGGREGATION_MODE_SUSPENDED) указывает, что даже в случае изменения свойств этого контакта так, что он перестает соответствовать текущему агрегированию, необходимо оставить его привязанным к этому агрегированному контакту.
Последнее замечание касается изменчивой природы агрегированного контакта. Предположим, что имеется уникальный низкоуровневый контакт с именем и фамилией. В данный момент он не соответствует никаким другим низкоуровневым контактам, поэтому он получает свой агрегированный контакт. Идентификатор агрегированного контакта сохраняется в таблице raw_contacts в строке для низкоуровневого контакта.
Однако далее изменяется фамилия низкоуровневого контакта, что делает его похожим на контакты, отличные от текущей агрегации. В таком случае низкоуровневый контакт удаляется из этого агрегированного контакта и перемещается в другой, оставляя текущий агрегированный контакт пустым. В результате идентификатор этого агрегированного контакта будет полностью отброшен, поскольку он не будет соответствовать чему-либо в будущем по причине отсутствия лежащего в основе низкоуровневого контакта.
Таким образом, агрегированный контакт изменчив. Точное значение идентификатора агрегированного контакта не важно и с течением времени может меняться.
Android позволяет несколько упростить дело, предоставляя поле под названием lookup в таблице contacts агрегированных контактов. Поле lookup представляет собой агрегацию (конкатенацию) учетной записи и уникального идентификатора этого низкоуровневого контакта в учетной записи для каждого низкоуровневого контакта. Затем эта информация кодируется, что позволяет передавать ее как параметр URL для извлечения последнего идентификатора агрегированного контакта. Android просматривает, существуют ли идентификаторы низкоуровневых контактов для конкретного ключа поиска (значения в поле lookup). После этого используется наиболее подходящий алгоритм для возврата соответствующего (или, возможно, нового) идентификатора контакта.
В дополнение к исследованиям базы данных contacts давайте рассмотрим пару полезных представлений, относящихся к этой базе данных.
Представление view_contacts
Первым из этих представлений является http://www.hotkontur.ru/bimetallicheskie-radiatory-global-kupit-global-style-500 view_contacts. Хотя существует таблица, хранящая агрегированные контакты (contacts), API-интерфейс не предоставляет прямой доступ к ней. Вместо этого в качестве целевого для чтения агрегированных контактов используется представление view_contacts. Запросы на основе URI вида ContactsContract.Contacts.CONTENT_URI возвращают столбцы представления view_contacts.
Обратите внимание, что это представление комбинирует таблицы contacts и raw_ contacts на основе идентификатора агрегированного контакта.
Представление contact_entities_view
Еще одним полезным представлением является contact_entities_view, которое комбинирует таблицу raw_contacts с таблицей data. Это представление позволяет извлечь за один раз все элементы данных заданного низкоуровневого контакта или даже элементы данных множества низкоуровневых контактов, относящихся к тому же самому агрегированному контакту.
Опубликовал katy Февраль 19 2015 21:28:31 · 0 Комментариев · 1789 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Иллюстрированный ...
Просмотр коммент...
Цветной Grid
Краснов М. - Open...
C++ Builder: Книг...
Панель Календарь
Файловый менеджер
База игр
AID антивирус
Эффект лампы на р...
DelTrayIcon [Исхо...
Размещение элемен...
ATComponents
Панель "Случайное...
Еext Editor
KOL & MCK v1.69
Ics
PHP 5 в подлинник...
Flud Vkontakte.ru
Нестандартные при...

Топ загрузок
Приложение Клие... 100541
Delphi 7 Enterp... 92571
Converter AMR<-... 20109
GPSS World Stud... 15743
Borland C++Buil... 13282
Borland Delphi ... 9288
Turbo Pascal fo... 7124
Калькулятор [Ис... 5262
Visual Studio 2... 5042
FreeSMS v1.3.1 3564
Случайные статьи
Работа с фильтрами...
ПРИЛОЖЕНИЕ 4. Блок...
Перечислимый тип в...
Краткая характерис...
Домашний театр на ...
Копирование и удал...
Идентификаторы в я...
Решения к главе 6
Небольшие изменени...
9.3. Запись грамм...
Снова интерфейс и ...
Требования к ресур...
Унификация доступа...
Безопастность Dial...
Клонирование устро...
Создание системы к...
Создание уникально...
Одноранговые комму...
Область Selection
ЦЕЛЬ: ПОДДЕРЖКА МА...
Серверные кластеры...
Разработка любител...
объектная переменная
LOOP (ОРГАНИЗОВАТЬ...
Технология Drag-an...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?