contentAndroidでRoom+RxJavaを実装するAndroidKotlinRxJava本記事ではAACのRoomPersistenceLibraryとRxJavaを組み合わせた、基本的な実装のお話をしていこうと思います。記事内のコードはKotlinで記述していますが、Coroutineなどは使っていないため、基本的にJavaに置き換えることも可能です。RxJavaに興味がある方セットアップ最初にbuild.gradle(app)に以下を記述します。'io.reactivex.rxjava2:rxandroid:2.0.2'androidx.room:room-rxjava2を記述することによって、DAOの戻り値でSingleやMaybeなどを指定することができます。room_versionに関しては2.1.0以上を使ってください。理由は後ほど詳しく記述しますが、2.1.0からInsertやdeleteの戻り値にCompletableを指定できるようになったからです。AndroidXに対応していないと、2.0.0以上のバージョンを使うことができないため、1.1.1を使ってください。サイトが参考になると思います。Entity次にEntityを記述します。String)@Entityこれをつけることによって、Roomで利用できるEntityになります。tableNameはオプションで、クラス名と実際に生成されるTable名を変えたいときにつけます。@PrimaryKeyは、1つのEntityに最低1つはつける必要があります。複数のPrimaryKeyを持つ場合は、以下のように@Entityアノテーション内に定義できます。trueになっている場合、idに0を渡すと、自動的にincrementしてくれます。idを指定する必要がない場合は、0を指定してください。@Ignoreを定義することによって、そのカラムを無視することができます。constructor.というエラーが吐かれます。これは全てのカラムにデフォルト値を指定することによって解消できます。Object(DAO)を記述します。Completable}@Insertは、UserEntity単体、複数(List)のどちらでもInserすることができます。onConflictは、任意の値を指定することによって、PrimaryKeyが同じものがInsertされた場合の挙動を指定することができます。今回は上書きするようにOnConflictStrategy.REPLACEを指定しました。サイトが参考になると思います。@Insertの戻り値はCompletableを指定できます。@Deleteでは引数にUserEntityを渡すことによって、渡したEntityを削除することができます。この戻り値もCompletableを指定することができます。Flowable/Observableを指定することができます。各々挙動が違うので、要件に合ったものを選ぶといいと思います。Maybe<UserEntity>データベース内に該当するUserEntityがない場合、何も返さずにonCompleteが呼ばれます。データベース内に該当するUserEntityがある場合、onSuccessが呼ばれ、終了します(onCompleteは呼ばれません)。Maybeが終了した後にUserEntityが更新されても何もしません。Single<UserEntity>データベース内に該当するUserEntityがない場合、onError(EmptyResultSetException)が呼ばれます。データベース内に該当するUserEntityがないかつ、List型を返す場合はonError(EmptyResultSetException)が呼ばれず、空のListが返されます。データベース内に該当するUserEntityがある場合、onSuccessが呼ばれ、終了します。Singleが終了した後にUserEntityが更新されても何もしません。Flowable<UserEntity>データベース内に該当するUserEntityがない場合、何も返さず、何も呼ばれません。データベース内に該当するUserEntityがある場合、onNextが呼ばれます。UserEntityが更新されるたびに、自動でonNextが呼ばれます。Database次にDatabaseを記述します。}}RoomDatabaseを継承したabstractクラスを作成します。@Database内のentitiesにアプリ内で使うEntityを宣言します。Entityが増えるたびに、ここに追加していく形になります。@Database内のversionにデータベースのversionを定義します。UserDaoの部分はDAOの宣言になります。DAOが増えるたびに、ここに追加していくことになります。init()やgetInstance()を生やしておき、外部から呼び出せるようにしておきます。最後に上で定義したDatabaseをApplicationクラスで初期化します。これでSampleDatabaseをどこからでも呼び出せるようになりました。使ってみるそれでは準備が整ったので、実際に使ってみようと思います。2で取得したUserEntityを削除この3つの処理を書いていこうと思います。すごくシンプルに書けます。subscribeOn()ここだけ説明しておきます。Room実行は基本的にBackgroundThreadを指定しないといけません。MainThreadで実行するとExceptionが吐かれます。MainThreadでの実行を許可したい場合は、RoomのInstance生成時に以下のような定義が必要になります。}最後にRoomはThread制限があったり、Queryが間違っていたらBuild時に教えてくれたり、とても親切なライブラリです。皆さんも是非使ってみてください。upLoginユーザーは見つかりませんでした。