处理Retrofit 2 RX中的错误

时间:2015-11-29 12:57:54

标签: android retrofit rx-java

我的请求应该获得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());
    }
}

1 个答案:

答案 0 :(得分:11)

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

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

如果检查结果为true,则表示您的请求中有错误。将throwable转换为HttpException,访问权限为成员。例如。

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

如果支票为false,则表示您遇到与网络相关的错误。