Vad*_*ovs 1 android rx-java retrofit retrofit2 rx-java2
我有一个WS,如果成功则返回200,没有任何正文,否则返回420,错误正文中的json不成功
返回类型为
Observable<Response<Void>>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果出现420代码错误,onNext(Response<Void> value)则调用onError(Throwable e)该代码,而不是针对其他任何不成功的请求调用该代码。
为什么仅在这种情况下才调用onNext而不是onError?如果请求未返回200,则可以调用onError?
这正是使用时的预期行为Response,任何状态码都封装为一个Response对象,并通过发出onNext()。而任何其他类型的异常(网络错误/解析错误/某些其他配置错误)将作为Exception交付onError()。
使用裸对象方法(Observable<T>/ Observable<Void>),对于从服务器获取响应和成功解析响应以外的任何其他情况,您将获得onError()。
如果是RxJava2,Observable<Void>则不再有效,因为不能发出null(RxJava2不再允许),而应使用Completable。
使用Response,您可以包装一个Error处理程序,例如用于特定的服务器错误代码。(你可以在我的答案看到一个例子在这里)
此外,还有一种Result类型可以封装任何错误类型和a(Response如果有)。
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |