RxJava+Retrofit,在联网返回后如何先进行统一的判断?

最近在学习rxjava,首先用于联网部分。数据为json格式。 json格式固定为: { "ResultMessage":null, "R
关注者
168
被浏览
10764
用 RxJava 操作符也可以实现,但是需要在次调用的时候加句 lift 之类。
推荐自己修改 GsonResponseBodyConverter (或 JacksonResponseBodyConverter,看你用哪个),如果 ResponseCode 不为 0,就抛出一个异常。
未修改前是:
final class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
private final TypeAdapter<T> adapter;

  GsonResponseBodyConverter(TypeAdapter<T> adapter) {
this.adapter = adapter;
  }

@Override public T convert(ResponseBody value) throws IOException {
try {
      return adapter.fromJson(value.charStream());
    } finally {
      value.close();
    }
  }

修改为:
final class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
    private final TypeAdapter<T> adapter;

    GsonResponseBodyConverter(TypeAdapter<T> adapter) {
        this.adapter = adapter;
    }

    @Override
    public T convert(ResponseBody value) throws IOException {
        try {
            JsonParser parser = new JsonParser();
            JsonElement root = parser.parse(new JsonReader(value.charStream()));
            if (root instanceof JsonObject) {
                JsonElement resultCodeEle = ((JsonObject) root).get("ResultCode");
                if (resultCodeEle instanceof JsonPrimitive
                        && ((JsonPrimitive) resultCodeEle).isString()){
                    String resultCode = resultCodeEle.getAsString();
                    //如果responseCode 不为 “0”,抛出 RuntimeException,或者自定义的异常类型
                    if (!"0".equals(resultCode)) {
                        throw new RuntimeException("responseCode 出错了!");
                    }
                }
            }
            return adapter.fromJsonTree(root);
        } finally {
            value.close();
        }
    }
}