Что такое использование класса из BaseColumns
в Android?
Это простой интерфейс, который добавляет два поля:
public interface BaseColumns
{
/**
* The unique ID for a row.
* <P>Type: INTEGER (long)</P>
*/
public static final String _ID = "_id";
/**
* The count of rows in a directory.
* <P>Type: INTEGER</P>
*/
public static final String _COUNT = "_count";
}
Внутренние базы данных sqlite, используемые в Android, поставляются с столбцом _id
, который автоинкрементируется и может функционировать как первичный ключ. Это также хорошо отображено с помощью ContentProviders
Интерфейс BaseColumns
предоставляет имена для очень общих столбцов _ID
и _COUNT
.
Использование общих имен позволяет платформе Android (и разработчикам) обращаться к любому элементу данных независимо от общей структуры (то есть других столбцов без идентификатора) унифицированным способом. Определение констант для часто используемых строк в интерфейсе/классе позволяет избежать повторения и опечаток по всему коду.
Использование столбца с именем _ID
(постоянное значение BaseColumns._ID
) требуется CursorAdapter
, реализации ContentProvider
и в других местах, где вы передаете Cursor
на платформу Android, чтобы делать что-то для вас. Например, адаптер ListView
использует столбец _ID
, чтобы дать вам уникальный идентификатор элемента списка, нажатого в OnItemClickListener.onItemClick()
, без необходимости явно указывать, что ваш столбец идентификатора каждый раз.
Независимо от того, реализуются ли интерфейсы, состоящие только из констант или reference с их полным именем, т.е. BaseColumns._ID
. Я лично предпочитаю последнее, потому что это более очевидно, где _ID
исходит, и первое похоже на злоупотребление наследованием.
Интерфейс BaseColumn предоставляет имена столбцов _ID и _COUNT. Вы должны указывать столбцы, которые используют их при построении таблиц. Например, чтобы создать столбец с именем столбца _ID, вы можете сделать следующее:
public static final String CREATE_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY, "
+ USERNAME + " TEXT NOT NULL, "
+ PASSWORD + " TEXT NOT NULL, "
+ EMAIL + " TEXT NOT NULL UNIQUE)";
SELECT
,BaseColumns._ID
определяет только имя этого столбца идентификатора.