Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 15
На сайте нет зарегистрированных пользователей

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

Расчет обратной матрицы на Delphi + Пояснительная записка
База данных - словарь терминов на Delphi + Пояснительная записка
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...

Агрегированные контакты
Когда множество учетных записей имеют один и тот же контакт, может понадобиться отобразить только одно имя, а не повторяющиеся или похожие имена для всех учетных записей. Это делается в 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 February 19 2015 18:28:31 · 0 Комментариев · 2490 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
DiZsubmit
Delphi 2005 для W...
Моделирование дви...
PolyFlow
Gold Submitter II...
Защита от спама ...
Программирование ...
Разработка интерн...
INSTANT BOOSTER v...
AdBlaster v2.5 - ...
PHP 5. Полное рук...
KOL & MCK v1.69
Abbrevia
Page Promoter 7.7...
Самоучитель C++
PDJ_Anima
Программа предназ...
CABfiles
SynEdit
EMS QuickExport S...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97837
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14192
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Где батут купить д...
обслуживания конкр...
Компоненты доступа...
Сеть CDN
Slotoking casino
Драйвер seg_vn
Duplicate unit name
Протокол SNMP
Процедура FloodFil...
ASM expected
Motorola Moto X XT...
Контейнеры и насле...
Определение методо...
Что делает маска п...
Задание ограничени...
Процедура ShowMessage
Видовые параметры ...
Обеспечение финанс...
Блок try–finally
Разреженные массивы
Так, пользователь ...
Булевские переменные
будут обращаться к...
Приобретение товар...
Развитие семейства...
Статистика



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


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