如何使用 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").???
任何工作示例都会很棒!
根据文档,如果不存在行,看起来我可以返回 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 -> { ... });
在这里,我展示了subscribe()
采用两个 lambda 表达式,用于User
和错误。您可以改用两个Consumer
对象。我还假设您rxandroid
作为依赖项,用于AndroidSchedulers.mainThread()
,并且您希望在该线程上将User
传递给您。
IOW,你使用它的方式与使用RxJava的任何其他Single
相同。详细信息将根据您的需求而有所不同。
根据谷歌文档:对于单个结果查询,返回类型可以是任何数据对象(也称为 POJO(。对于返回多个值的查询,可以使用 java.util.List 或 Array。谷歌文档