AndroidでBaseColumns
のクラスを実装する用途は何ですか?
これは、2つのフィールドを追加するシンプルなインターフェースです。
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";
}
Androidで内部的に使用されるsqliteデータベースには、自動インクリメントされ、主キーとして機能する_id
列が付属しています。これはContentProviders
にもうまく対応します
BaseColumns
インターフェイスは、非常に一般的な__ID
_および__COUNT
_列の名前を提供します。
共通名を使用すると、Androidプラットフォーム(および開発者も))が、その全体的な構造(つまり、他の非ID列)に関係なく、あらゆるデータ項目を統一された方法でアドレス指定できるようになります。定数の定義インターフェイス/クラスで一般的に使用される文字列は、コード全体での繰り返しやタイプミスを回避します。
CursorAdapter
では、__id
_(_BaseColumns._ID
_の定数値)という名前の列を使用する必要があります。 ContentProvider
の実装 およびCursor
をAndroidプラットフォームに渡すための他の場所。たとえば、ListView
のアダプタは__ID
_列を使用すると、クリックしたリスト項目の一意のID OnItemClickListener.onItemClick()
を取得できます。毎回ID列を明示的に指定する必要はありません。
implement定数のみで構成されるインターフェース、またはreferenceそれらのフルネーム、つまり_BaseColumns._ID
_を使用するかどうかは好みの問題です。私は個人的に後者を好みます。なぜなら、__ID
_がどこから来ているのかが明確であり、前者は継承の乱用のように感じるからです。
BaseColumnインターフェースは、列names _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)";
こんなインターフェースです
public interface BaseColumns
{
public static final String _ID = "_id";
public static final String _COUNT = "_count";
}
SQL lite DBで自動インクリメントに使用されるidやcountなどの定数が含まれています。
この特定のインターフェイスを使用せずに、idの独自の定数を作成することもできます。ただし、カーソルアダプターなどの関数には、「_ id」などの正確な定数が必要なので、提供されているインターフェイスを使用することをお勧めします。
これがあなたを助けることを願っています!! :-)