web-dev-qa-db-ja.com

Android Roomで単一行クエリを実行する方法

Android Room with RxJava)を使用して単一行クエリを作成するにはどうすればよいですか?アイテムのリストをクエリできますが、問題はありません。ここで、特定の行が存在するかどうかを確認したいと思います。ドキュメントでは、行が存在しない場合、Singleを返し、EmptyResultSetException例外を確認できるようです。

私は次のようなものを持つことができます:

@Query("SELECT * FROM Users WHERE userId = :id LIMIT 1")
Single<User> findByUserId(String userId);

この通話の使い方を教えてください。 onError/onSuccessがあるようですが、Single <>でこれらのメソッドを見つけることができません。

usersDao.findByUserId("xxx").???

どんな実例も素晴らしいでしょう!

8
srvy

ドキュメントによると、行が存在しない場合は、Singleを返し、EmptyResultSetException例外を確認できるようです。

または、他の方法でバックグラウンドスレッドを処理している場合は、Userを返します。

_@Query("SELECT * FROM Users WHERE userId = :id")
User findByUserId(String id);
_

この通話の使い方を教えてください。

_usersDao.findByUserId("xxx")
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(user -> { ... }, error -> { ... });
_

ここでは、Userとエラーに対して、2つのラムダ式を取るsubscribe()を示します。代わりに2つのConsumerオブジェクトを使用できます。また、AndroidSchedulers.mainThread()の依存関係としてrxandroidがあり、Userがそのスレッドで配信されることを前提としています。

IOW、これはRxJavaの他のSingleを使用するのと同じ方法で使用します。詳細は必要に応じて異なります。

10
CommonsWare