web-dev-qa-db-ja.com

AndroidでのBaseColumnsの使用は何ですか

AndroidでBaseColumnsのクラスを実装する用途は何ですか?

47
Shahrukh A.

これは、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にもうまく対応します

34
Reno

BaseColumns インターフェイスは、非常に一般的な__ID_および__COUNT_列の名前を提供します。

共通名を使用すると、Androidプラットフォーム(および開発者も))が、その全体的な構造(つまり、他の非ID列)に関係なく、あらゆるデータ項目を統一された方法でアドレス指定できるようになります。定数の定義インターフェイス/クラスで一般的に使用される文字列は、コード全体での繰り返しやタイプミスを回避します。

CursorAdapter では、__id_(_BaseColumns._ID_の定数値)という名前の列を使用する必要があります。 ContentProviderの実装 およびCursorをAndroidプラットフォームに渡すための他の場所。たとえば、ListViewのアダプタは__ID_列を使用すると、クリックしたリスト項目の一意のID OnItemClickListener.onItemClick() を取得できます。毎回ID列を明示的に指定する必要はありません。

implement定数のみで構成されるインターフェース、またはreferenceそれらのフルネーム、つまり_BaseColumns._ID_を使用するかどうかは好みの問題です。私は個人的に後者を好みます。なぜなら、__ID_がどこから来ているのかが明確であり、前者は継承の乱用のように感じるからです。

63

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)";
1
eric.mcgregor

こんなインターフェースです

public interface BaseColumns
{

    public static final String _ID = "_id";


    public static final String _COUNT = "_count";
}

SQL lite DBで自動インクリメントに使用されるidやcountなどの定数が含まれています。

この特定のインターフェイスを使用せずに、idの独自の定数を作成することもできます。ただし、カーソルアダプターなどの関数には、「_ id」などの正確な定数が必要なので、提供されているインターフェイスを使用することをお勧めします。

これがあなたを助けることを願っています!! :-)

0
HariRam