如何使用 RxJava 使用 Android Room 进行单行查询?我能够查询项目列表,没有问题。在这里,我想查找特定行是否存在。根据文档,如果不存在任何行,看起来我可以返回 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.
或者,如果您正在通过其他方式处理后台线程,则只需返回 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
一样使用它。详细信息将根据您的需要而有所不同。
关于android - 如何使用 Android Room 进行单行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825789/