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

How to do a single row query with Android Room

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

我可以有这样的东西:

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

如何使用这个电话?看起来有一些 onError / onSuccess 但在 Single<> 上找不到这些方法。

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

任何工作示例都很棒!

According to the docs, looks like I can return Single and check for EmptyResultSetException exception if no row exists.

或者,只是 return User,如果您通过其他方式处理后台线程。

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

How do I use this call?

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

在这里,我展示了 subscribe() 采用两个 lambda 表达式,用于 User 和错误。您可以改用两个 Consumer 对象。我还假设您有 rxandroid 作为 AndroidSchedulers.mainThread() 的依赖项,并且您希望 User 在该线程上传递给您。

IOW,你可以像使用 RxJava 中的任何其他 Single 一样使用它。详细信息将根据您的需要而有所不同。