Retrofit请求成功数据错误统一拦截后抛自定义异常后,异步调用获取服务器返回来的错误信息

时间久了容易忘记。网上这一块资料不多很多不能用,自己摸索着写出来的,这里做个笔记方便以后查看。
项目用的mvp+rxjava+retrofit 但是某些地方特别简单的接口调用没必要创建很多文件加上时间太紧,就直接用retrofit异步请求了。

这是封装的拦截器的一部分代码。统一拦截状态码不为0 抛出自定义异常

public class CustomizeGsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {

    private final Gson gson;
    private final TypeAdapter<T> adapter;

    CustomizeGsonResponseBodyConverter(Gson gson, TypeAdapter<T> adapter) {
        this.gson = gson;
        this.adapter = adapter;
    }

    @Override
    public T convert(ResponseBody value) throws IOException {
        //把responsebody转为string
        String response = value.string();

        BaseBean baseResponse = gson.fromJson(response, BaseBean.class);
         // 这里只是为了检测code是否!=1,所以只解析HttpStatus中的字段,因为只要code和message就可以了
        if (baseResponse.getCode() != 0) {
            value.close();
            //抛出一个RuntimeException, 这里抛出的异常会到subscribe的onError()方法中统一处理
            throw new MyThrowable(baseResponse.getMsg(), baseResponse.getCode());
        }
        try {
            return adapter.fromJson(response);
        } finally {
            value.close();
        }
    }
}

正常用的时候异常信息传递给Observer 收到后presenter 调用view 失败的方法。没毛病

但是上面说的那种情况 不想这么走 retrofit 的回调是这样的

 RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
        RetrofitUtils.getApiUrl().requestCreateOrders(url, body).enqueue(new Callback<CreateOrderBean>() {
            @Override
            public void onResponse(Call<CreateOrderBean> call, Response<CreateOrderBean> response) {
            }

            @Override
            public void onFailure(Call<CreateOrderBean> call, Throwable t) {

            }
        });

怎么看自定义的message

   RetrofitUtils.getApiUrl().requestCreateOrders(url, body).enqueue(new Callback<CreateOrderBean>() {
            @Override
            public void onResponse(Call<CreateOrderBean> call, Response<CreateOrderBean> response) {
               }

            @Override
            public void onFailure(Call<CreateOrderBean> call, Throwable t) {
                String s = ((MyThrowable) t).getMessageContent();
  
            }
        });

关键代码就一句
((MyThrowable) t).getMessageContent();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值