Intereting Posts
Требуется создать ускоренную прокрутку с передним charecter для отображения на экране, когда пользователь перетаскивает список алфавита Снимите флажки всех флажков в пользовательском ListView Android, как использовать адаптер для listView без расширения listActivity Должен ли я изменить существующий список в моем приложении на RecyclerView? Как исправить «Избегайте передачи null в качестве корня представления» в android? Qemu, div на ноль, регистр mxcsr RunOnUiThread в фрагменте Достигнутый размер MAX для кэша операторов compiled-sql для базы данных Как использовать Android aaptOptions? Как установить комбинированный цвет для перекрываемой области двух разных цветовых объектов? Больше пространства между строками в TextView Открыть браузер с последним посещенным адресом Почему метод start () MediaRecorder генерирует исключение IllegalStateException? Как установить атрибут android: layout_alignParentLeft для просмотра изображений в коде? Как добавить библиотеку picasso в андроид-студию

В чем разница между контактами и сырыми контактами?

У меня есть утилита «дамп», которую я использую для изучения ContactsContract, поскольку я не совсем понимаю ее в документации. Когда я удаляю контакты, он подсчитывает 263 записи в таблице, однако приложение-контакты в моем устройстве перечисляет, что у меня есть 244 («Отображение 244 контактов»).

Может ли кто-то объяснить несоответствие?

Приложение «Мои контакты Sprint LG» имеет параметры отображения для каждой из учетных записей, которые я синхронизирую, и я вошел и проверил их все, поэтому фильтрации не должно быть.

Основной URI, который я использую в утилите:

Uri uriRawContacts = ContactsContract.RawContacts.CONTENT_URI; String[] projection = new String [] { ContactsContract.RawContactsEntity._ID, ContactsContract.RawContactsEntity.CONTACT_ID, ContactsContract.RawContactsEntity.DELETED, ContactsContract.RawContactsEntity.AGGREGATION_MODE, }; Cursor cursorRaw = cr.query(uriRawContacts, projection, null, null, null); DumpCursor.dumpAnyCursor(getApplicationContext(), "RawContacts", cr, cursorRaw, ","); 

Далее следуют (для каждого _ID в вышеуказанном запросе):

  long rawContactId = Long.parseLong(anyCursor.getString(anyCursor.getColumnIndex(RawContacts.CONTACT_ID))); Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); Log.d(TAG, "rawContactUri: " + rawContactUri.toString()); Log.d(TAG, "entityUri: " + entityUri.toString()); Cursor c = cr.query(entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null); 

Затем я просматриваю первый запрос, отображает все столбцы в моей проекции, затем, используя поле _ID в цикле первого запроса, я выдаю второй запрос и выгружаю все его столбцы.

Пули из ответа, транспонированного здесь для удобства: см. Ссылку для более подробного объяснения. Более конкретно, вам рекомендуется прочитать правила агрегации. Ссылка: Нажмите здесь, чтобы исходный цитируемый текст, который следует

  • База данных контактов разделена на 3 контакта таблиц, сырые контакты и данные.
  • Каждая таблица содержит столбец (_ID), который является автоматически увеличивающимся первичным
    ключ.
  • Таблица данных содержит всю контактную информацию, такую ​​как номер телефона, идентификатор почты,
    Адрес и т.д.
  • Необработанные контакты указывают на созданный фактический контакт. Поэтому при добавлении контакта мы используем необработанные контакты.
  • Пользователь не может добавлять данные в таблицу контактов. Данные в этом
    Таблица заселена из-за
    Агрегирование контактов.

Причиной вашей логики для некоторых контактов является: _ID для контактов, сырые контакты остаются такими же, пока не произойдет какая-либо контактная агрегация. Допустим, вы добавили два контакта с тем же именем abc. Здесь _ID для сырых контактов увеличивается дважды, а _ID для контактов увеличивается только один раз, когда эти два контакта объединяются из-за агрегации контактов

Solutions Collecting From Web of "В чем разница между контактами и сырыми контактами?"

Это различие связано с тем, что RawContacts объединяется с контактами из-за правила агрегации.

Вы добавляете контакт в RawContacts, в то время как в списке отображаются Контакты. Отсюда разность счетчиков.

Ниже вы найдете описание контактов, RawContacts и Data. Даже если вопрос другой, вы можете получить разницу между контактами и RawContacts.

Дайте мне знать, если вам нужно что-нибудь еще.

Эти три таблицы обычно называются именами их контрактных классов. Классы определяют константы для URI содержимого, имен столбцов и значений столбцов, используемых таблицами:

ContactsContract.Contacts table: – Строки, представляющие разные люди, основанные на совокупности строк raw-контактов.

ContactsContract.RawContacts table: – Строки, содержащие сводку данных пользователя, относящихся к учетной записи пользователя и типу.

ContactsContract.Data table: – Строки, содержащие детали для сырого контакта, такие как адреса электронной почты или номера телефонов.

Для получения дополнительной информации нажмите