如何使用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").???

任何工作示例都会很棒!

根据文档,如果不存在行,看起来我可以返回 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。谷歌文档

最新更新