ActiveAndroidをContentProvider経由で使うメモ

  • 21
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ActiveAndroidをContentProvider経由で使うためのメモです。
時間あれば丁寧にまとめ直したい。

公式ドキュメント

https://github.com/pardom/ActiveAndroid/wiki/Using-the-content-provider
あまり情報が載っていません。
実際に使おうとすると色々準備することがあります。

ライブラリ

公式ドキュメントにはテーブルのユニークなIDのカラム名を
Idから_idに変えるよう指示があります。
しかし、Githubにある最新のmaster branchには
現在IDを変えるアノテーションが実装されていません。
なので、ここのツリーからソースを落としてjarを生成してください。
https://github.com/dirong/ActiveAndroid/tree/921c703e7181fcecae6f07d5d46b7249c3fdcbc5

既にTableを生成してしまっている場合は別途DBのマイグレーションが必要です。

AndroidManifest

AndroidManifest.xml
<provider
   android:name="com.activeandroid.content.ContentProvider"
   android:authorities="APKのパッケージ名" />

ContentProviderを使うためこれを追記します。

カーソル取得

getActivity().getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks<Cursor>() {
    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle cursor) {
        return new CursorLoader(getActivity(),
            ContentProvider.createUri(MyEntityClass.class, null),
            null, null, null, null
        );
    }

    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
        ((SimpleCursorAdapter)mySpinner.getAdapter()).swapCursor(cursor);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        ((SimpleCursorAdapter)mySpinner.getAdapter()).swapCursor(null);
    }
});

このへんはマニュアル通りに。
ここでのモデルのクラス名はMyEntityClass.classらしい

カーソルからモデルインスタンスを作る

マニュアルはSimpleCursorAdapterを使ってますが、
実際にはCursorAdapterを拡張したりして使うことが多いと思います。
そこでカーソルのまま扱うと大変(ActiveAndroidを使うメリットも少ない)なので
モデルインスタンスをカーソルから作ります

MyEntityClass entity = new MyEntityClass();
entity..loadFromCursor(c);

cは1行分のカーソルです。
CursorAdapterを利用する場合はbindViewの引数がそのまま使えます。