Подтвердить что ты не робот

Почему/Должны ли мы использовать BaseColumns при использовании Content Provider в Android?

Я просматривал исходный код для Google IOSched Приложение и заметил следующий фрагмент кода как часть реализации Content Provider:

public static class Blocks implements BlocksColumns, BaseColumns.

Насколько я знаю BaseColumns - это просто интерфейс с двумя константами: _COUNT и _ID.

У меня есть два вопроса:

  • Каковы преимущества/недостатки внедрения BaseColumns в отличие от наличия частного класса _ID в классе напрямую?

  • Какова роль константы _COUNT?

4b9b3361

Ответ 1

В соответствии с Руководство для разработчиков Android,

Примечание. Поставщику не требуется иметь первичный ключ, и он не является требуется использовать _ID в качестве имени столбца первичного ключа, если настоящее время. Однако, если вы хотите привязать данные от поставщика к ListView, одно из имен столбцов должно быть _ID. Это требование более подробно объясняется в разделе "Отображение результатов запроса".

Руководство продолжает объяснять, почему вам нужно уникальное значение, предоставляемое primary key,

Данные таблицы всегда должны иметь столбец "первичный ключ", который поставщик поддерживается как уникальное числовое значение для каждой строки. Вы можете использовать это значение для привязки строки к связанным строкам в других таблицах (используя ее как "внешний ключ" ). Хотя вы можете использовать любое имя для этого столбца, используя BaseColumns._ID - лучший выбор, , потому что связывание результатов запрос поставщика в ListView требует, чтобы один из извлеченных столбцов имеют имя _ID.[акцент мой]

Чтобы ответить на ваши вопросы в том порядке, в котором вы их предоставили:

  • Наличие столбца _ID - это наилучшая практика для универсальности. Он не должен отображаться, но отлично работает как первичный ключ (и внешний ключ!). Требуется для курсоров и запросов.
    • Определив его с помощью BaseColumns, автоматически идентифицирует этот столбец как первичный ключ, уникальный (очевидно), и инструктирует его автоинкремент.
    • Предположительно, внедрение BaseColumn проще, чем печатать эти свойства для ваших частных полей.
  • _COUNT - это просто количество строк в каталоге. Если ваши строки таблицы удаляются и добавляются, нет оснований полагать, что элемент _ID integer имеет какое-либо отношение к тому, когда он был добавлен, или его свойства сортировки. Другими словами, last_insert_rowid() НЕ РАВНО Count(). Столбец _COUNT просто предоставляет способ показать, сколько результатов возвращается в запросе, В КАЖДОЙ ЛИНИИ этого запроса. Для визуальной ссылки см. linuxtopia.org

Ответ 2

Нет реальной причины использовать его... вы можете полностью игнорировать его и использовать свои собственные определения _ID и _COUNT (если вам нужно)...