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

标签 android rx-java2 android-room

如何使用 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/

相关文章:

android - 如何在android studio中修复 "Unknown URL content://com.new.newapp.locations/locations"

java - 使用 Arraylist 将其部分数据显示到 Android setMultiChoiceItems(Alert Dialog)

android - 使用 Retrofit 的 RxJava JUnit 测试抛出 NullPointerException

android - 如何在房间数据库中实现sqlite查询?

java - 我可以在 Android 的多个线程中使用同一个 RoomDatabase 对象吗?

Android:如何在不重写重写方法的情况下在每个(列表) Activity 中都有一个共享菜单?

java - 了解 'getView()'

java - 是否有更干净的方法使用 RxJava 来适应标准观察者/监听器服务?

android - 如何使 Rx 请求更快地划分为单独的线程?

Android Room - 自动递增@database 版本号?