首页 文章

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

提问于
浏览
3

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

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

1 回答

  • 4

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

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

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

    我该如何使用此电话?

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

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

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

相关问题