我有这个问题关于空数据库返回与房间和RxJava单一。我知道我的数据库是空的,所以我希望在触发时得到一个空的返回
@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()
但仍然返回异常和崩溃
w/system.err:io.reactivex.exceptions.onerrornotimplementedexception:查询返回空结果集:SELECT*FROM Times WHERE timestamp=?
我在StackOverflow上看过很多类似的问题,但都找不到答案。我做错了什么?
首先,解决你的问题。由于2.1.0-alpha01
Room版本支持maybe
返回类型,这对于建模您的问题非常合适。
从文档中可以看到:
可能使用以下顺序协议操作:onsubscribe(onsuccessonerroroncomplete)?
将Dao类中的single
替换为maybe
将起作用。
进一步说明:
timeDao.getTimes("1398332113")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnError { Log.e("Single", "Returned null") }
.doOnSuccess { result -> times = result}
.subscribe()
doonerror
将在en错误的情况下执行lambda,但它仍然会沿链发出错误。您的程序崩溃,因为它不处理错误(subscribe()
为空)。
默认值不能为null,反应流规范(RxJava2实现了它)不支持null值。
我正在使用较新的RX java,而不是 如果一切正常的话,这段代码几乎可以完美地工作。但如果我故意犯了个错误,比如我关掉了WiFi。而不是改型获得“UnknownHostException”...因为它应该发生在try catch块中的reverfit调用(getUser)中。但它没有将错误处理到onError(Throwable t)-->(我可以处理的地方),而是使应用程序崩溃。这就像错误从未
一般来说,Observable不会抛异常。它会调用 onError 终止Observable序列,以此通知所有的观察者发生了一个不可恢复的错误。 但是,也存在一些异常。例如,如果 onError 调用失败了,Observable不会尝试再次调用 onError 去通知观察者,它会抛出 RuntimeException,OnErrorFailedException 或者 OnErrorNotImpl
我正在尝试在MVVM中实现一个ViewModel,提供可观察的东西作为“输入流”,提供观察者作为“输出流”供视图绑定。
我在我的项目中使用Retrofit2与可观察的接口和结果包装器。示例: 我需要Result wrapper从响应中获得比序列化对象更多的信息(例如headers、http Status...)。 问题是,对于结果包装器,网络调用不会引发异常。您可以通过调用result.error()在结果中找到异常。 如果我想利用RxJava错误操作符,我应该怎么做?例如,我希望对网络错误使用重试操作符,但重试操
嗨,我是RxJava和Kotlin的新手,我对它有一些概念。 我知道错误是很明显的。所以我知道缺少了什么,但我不知道的是如何处理这个错误。 我尝试添加:,但仍显示相同的错误消息。
我有一个使用服务器的小型WebSocket应用程序,我对自己感觉很好。现在我想添加不同的“房间”(列表应该是动态的)到我的应用程序,但我很难找到任何文档或示例项目。我并不害怕旋转我自己的解决方案,但依靠别人的经验是很好的。有人知道类似实现的例子吗? 2)我可以在每次打开新房间时建立一个新的套接字endpoint,并将新的URL发送回前端(或者如果房间已经打开了,则发送现有的URL),然后丢弃旧的套