LoginSignup
20
18

More than 5 years have passed since last update.

ActiveAndroidをContentProvider経由で使うメモ

Posted at

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の引数がそのまま使えます。

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18