我有一个WS,如果成功则返回200没有正文,或者错误正文中的json为420则不成功
返回类型是
Observable<Response<Void>>
出于某种原因,如果出现420错误的错误,则调用 onNext(Response<Void> value) 而不是 onError(Throwable e) ,这是为任何其他不成功的请求调用的 .
onNext(Response<Void> value)
onError(Throwable e)
为什么只在这种情况下调用onNext而不是onError?如果请求没有返回200,可以调用onError吗?
这正是使用 Response 时的预期行为,任何类型的状态代码都封装为 Response 对象,并使用 onNext() 发出 . 任何其他异常(网络错误/解析错误/某些其他配置错误)将在 onError() 中作为异常传递 .
Response
onNext()
onError()
使用裸对象apprach( Observable<T> / Observable<Void> ),除了从服务器获得响应以及响应被成功解析之外的任何其他情况,您将获得 onError() .
Observable<T>
Observable<Void>
在RxJava2的情况下, Observable<Void> 不再有效,因为无法发出null(RxJava2不再允许),而是应该使用 Completable .
Completable
使用 Response ,您可以为特定服务器错误代码包装一个错误处理程序 . (你可以在我的回答中看到一个例子here)
此外,还有 Result 类型封装任何错误类型和 Response (如果有) .
Result
1 回答
这正是使用
Response
时的预期行为,任何类型的状态代码都封装为Response
对象,并使用onNext()
发出 . 任何其他异常(网络错误/解析错误/某些其他配置错误)将在onError()
中作为异常传递 .使用裸对象apprach(
Observable<T>
/Observable<Void>
),除了从服务器获得响应以及响应被成功解析之外的任何其他情况,您将获得onError()
.在RxJava2的情况下,
Observable<Void>
不再有效,因为无法发出null(RxJava2不再允许),而是应该使用Completable
.使用
Response
,您可以为特定服务器错误代码包装一个错误处理程序 . (你可以在我的回答中看到一个例子here)此外,还有
Result
类型封装任何错误类型和Response
(如果有) .