首页 文章

使用Retrofit2和rxJava2处理没有正文的响应

提问于
浏览
0

我有一个WS,如果成功则返回200没有正文,或者错误正文中的json为420则不成功

返回类型是

Observable<Response<Void>>

出于某种原因,如果出现420错误的错误,则调用 onNext(Response<Void> value) 而不是 onError(Throwable e) ,这是为任何其他不成功的请求调用的 .

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

1 回答

  • 4

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

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

    在RxJava2的情况下, Observable<Void> 不再有效,因为无法发出null(RxJava2不再允许),而是应该使用 Completable .

    使用 Response ,您可以为特定服务器错误代码包装一个错误处理程序 . (你可以在我的回答中看到一个例子here

    此外,还有 Result 类型封装任何错误类型和 Response (如果有) .

相关问题