处理 Retrofit 2 RX 中的错误

Handle errors in Retrofit 2 RX

我的请求应该得到 POJO 的 JSON 或 JSON 描述的错误(可能是无效的请求字段、服务器问题等)。

但是订阅者中的改造只给我 Throwable。怎么才能查出是网络错误,什么是http代码,得到JSON有错误?

private class ProjectListSubscriber extends Subscriber<ProjectListResponse> {

    @Override
    public void onCompleted() {
    }

    @Override
    public void onError(Throwable e) {
        //is that a network? http code? convert json to error POJO?
    }

    @Override
    public void onNext(ProjectListResponse projectListResponse) {
        updateProjectList(projectListResponse.getProjectList());
    }
}

由于您使用的是 RxJava,因此在出现网络错误时会调用 onError,并且与端点相关的错误是 Response 的一部分。 如果出错,检查 throwable 是否是 HttpException

的实例
public void onError(Throwable e) {
    if (e instanceof HttpException) {

如果检查为真,则说明您的请求有误。将 throwable 转换为 HttpException,并且访问是成员。例如。

((HttpException) e).response().errorBody()

如果检查结果为 false 那么您遇到了与网络相关的错误。