如何使用Android Room进行单行查询

srv*_*rvy 7 android rx-java2 android-room

如何使用带有RxJava的Android Room进行单行查询?我能够查询项目列表,没有问题.在这里,我想查找是否存在特定行.根据文档,看起来我可以返回Single并检查EmptyResultSetException异常,如果不存在行.

我可以有类似的东西:

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

我该如何使用此电话?看起来有一些onError/onSuccess但在Single <>上找不到那些方法.

usersDao.findByUserId("xxx").???
Run Code Online (Sandbox Code Playgroud)

任何工作的例子都会很棒!

Com*_*are 9

根据文档,看起来我可以返回Single并检查EmptyResultSetException异常,如果不存在行.

或者,User如果您通过其他方式处理背景线程,则返回.

@Query("SELECT * FROM Users WHERE userId = :id")
User findByUserId(String userId);
Run Code Online (Sandbox Code Playgroud)

我该如何使用此电话?

usersDao.findByUserId("xxx")
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(user -> { ... }, error -> { ... });
Run Code Online (Sandbox Code Playgroud)

在这里,我展示subscribe()了两个lambda表达式,用于User和错误.您可以使用两个Consumer对象.我还假设你有rxandroid一个依赖关系,AndroidSchedulers.mainThread()并希望User在该线程上传递给你.

IOW,您使用它的方式与使用SingleRxJava中的任何其他方法相同.细节将根据您的需求而有所不同.