当前位置: 首页 > 知识库问答 >
问题:

RxJava单人和房间错误处理问题

逄宁
2023-03-14

我有这个问题关于空数据库返回与房间和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上看过很多类似的问题,但都找不到答案。我做错了什么?

共有1个答案

微生承业
2023-03-14

首先,解决你的问题。由于2.1.0-alpha01Room版本支持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),然后丢弃旧的套