Retrofit+RxJava完美封装(二)

前面一章已经完整的讲述了Retrofit+RxJava的封装.

但是由于又来了一个需求,我这封装无法满足,所以这里需要再修改下.


需求:

不要对返回的数据做处理

如 返回的数据为:

{
   data:{},
   errorCode:200,
   errorInfo:""
}

原先我会把先判断errorCode然后把data数据取出,转化为对应的对象.

现在需求是,直接把原来的数据返回.


由于预先处理的代码都是封装在OkHttp的拦截器中,所以也不方便传参数.

所以我这里以添加Head头参数的方式来判断是否要对返回的数据进行预先处理.

代码如下:

 @POST
    @FormUrlEncoded
    Observable<String> weexRequest(@Url String url , @FieldMap Map<String,Object>param,@Header("origion")boolean origion);

这里添加了@Head参数.

在预先处理返回数据前,我们可以先获取这个值,然后进行处理.

代码如下:

  String origion = newRequest.header("origion");
  originalResponse = dealResponseData(Boolean.parseBoolean(origion),originalResponse);

/**
     * 统一处理原始数据
     *
     * @param origion  是否需要原生的 不转化的数据
     * @param originalResponse
     */
    private static Response dealResponseData(Boolean origion, Response originalResponse) {
        String jsonString = null;
        try {
            BufferedSource bufferedSource = originalResponse.body().source();
            jsonString = bufferedSource.readString(Charset.forName("utf-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (origion != null && origion) {
            return onSuccess(originalResponse, jsonString);
        }
        ResponseMessageBean msgBean = ResponseMessageBean.analyseReponse(jsonString);
        if (msgBean == null) return onSuccess(originalResponse, msgBean.data.toString());
        if (msgBean != null && (msgBean.errorCode == 200)) {
            showError = true;
            if (msgBean.data != null) {
                return onSuccess(originalResponse, msgBean.data.toString());
            } else {
                return originalResponse.newBuilder().body(null).build();
            }
        } else {
            onFailed(msgBean);
            throw new RuntimeException(msgBean.moreInfo.toString());
        }
    }

以后可能还需要慢慢根据修改,不断去修改代码.

完美封装其实并不完美,但是可以渐渐趋向完美.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值