android - 使用 Retrofit2 和 rxJava2 处理没有主体的响应

标签 android retrofit rx-java retrofit2 rx-java2

我有一个 WS,如果成功,它会返回 200,但没有正文 或 420 错误正文中包含 json 不成功

返回类型为

Observable<Response<Void>>

由于某种原因,如果出现 420 代码错误 onNext(Response<Void> value)被调用而不是 onError(Throwable e)任何其他不成功的请求都会调用它。

为什么只在这种情况下调用onNext而不是onError?如果请求没有返回200,是否可以调用onError?

最佳答案

这正是使用 Response 时的预期行为,任何类型的状态码都封装为 Response对象,并用 onNext() 发出。而任何其他异常(网络错误/解析错误/其他一些配置错误)都将作为 onError() 中的异常传递。

使用裸对象方法( Observable<T>/Observable<Void> ),除了从服务器获得响应并且响应已成功解析之外的任何其他情况,您将获得 onError()

如果是 RxJava2,Observable<Void>不再有效,因为无法发出 null(RxJava2 不再允许),您应该使用 Completable .

Response ,您可以包装一个错误处理程序,例如针对特定服务器错误代码。 (你可以在我的回答 here 中看到一个例子)

此外,还有Result封装任何错误类型和 Response 的类型如果有的话。

关于android - 使用 Retrofit2 和 rxJava2 处理没有主体的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44200683/

相关文章:

android - Google Mobile Vision API 无法检测纵向模式下的文本

java - 常规 If 语句中的奇怪 Java 问题

android - 在 RetroFit 中处理来自同一端点的不同 JSON 响应类型

android - 带有 View 列表的链式动画 RxJava2 Android

java - RxJava 和 GreenRobot 事件总线

java - 我的应用程序在 Android 4.4.2 中崩溃,但在 5.1.1 中没有崩溃

java - Qt 和 Android Gallery - 使用 QAndroidJniObject 的 MediaStore

android - Retrofit LiveDataCallAdapter 不调用函数 adapt(call)

java - 改造空响应

java - 可观察到的热点