【发布时间】:2018-10-28 02:41:19
【问题描述】:
我遇到了关于 Room 和 RxJava Single 返回空数据库的问题。 我知道我的数据库是空的,所以我希望在触发时得到一个空的返回
@Query("SELECT * FROM Times WHERE timestamp = :timestamp")
fun getTimes(timestamp: String): Single<Times>
问题是当我如下调用这个函数时
timeDao.getTimes("1398332113")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnError { Log.e("Single", "Returned null") }
.doOnSuccess { result -> times = result}
.subscribe()
订阅者确实在调用doOnError 方法
E/Single:返回 null
但仍然返回异常并崩溃
W/System.err:io.reactivex.exceptions.OnErrorNotImplementedException: 查询返回空结果集:SELECT * FROM Times WHERE timestamp = ?
我在 StackOverflow 上看到了很多类似的问题,但找不到答案。我做错了什么?
【问题讨论】:
-
doOn...运算符是副作用运算符,它们不是订阅者。您应该在订阅方法中实现onSuccess和onError。您应该考虑改用Maybe- 一个单一的,如前所述是成功或错误,因此如果您有空结果将出错,除非这是需要的(恕我直言 onError 应该只用于不可恢复的错误,而不是作为全部可预防的问题)。
标签: android exception-handling rx-java android-room rx-android