Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

База данных студентов на Delphi (файл записей) + Блок схемы
Моделирование работы участка термической обработки шестерен на GPSS + По...
Моделирование работы ЭВМ на GPSS + Пояснительная записка

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

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Delphi7 Для профе...
Самоучитель PHP 5...
Report
ShadelLabel
XPcontrol
Искусство програм...
Разработка распре...
Matrix2D
Карта сайта
PCX
Редактор текста (...
AVIwriter
PBFoldder
index.php + мод ...
Архив значков
TDBF
«Философия» прогр...
ComboBox97
Создание оригинал...
Delphi 6. Учебный...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97843
Converter AMR<-... 20269
GPSS World Stud... 17020
Borland C++Buil... 14195
Borland Delphi ... 10304
Turbo Pascal fo... 7376
Калькулятор [Ис... 5987
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Интернет-ресурсы и...
Важность библиотек
Этап 2 - перенос о...
Клуб вулкан &ndash...
Состояние потока и...
Предотвратить реги...
Открытые файлы и о...
Перечислимый тип в...
Обработка принимае...
Металлические опор...
Так, пользователь ...
Селектор казино
Список таблиц в ди...
Создание нового пр...
inf 270— SMB-подпи...
Недостатки реализа...
Image::Magick или ...
Установление свойс...
Разные версии кэш-...
Вычисление суммы ч...
Базовая программа ...
Нужно добавить доп...
Скорость процессора
Ускорение процедур...
Установка для эксп...
Статистика



Друзья сайта
Программы, игры
Error: Incorrect password!
Error: Incorrect password!


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