Retrofit+RxJava完美封装(二)

前面一章已经完整的讲述了Retrofit+RxJava的封装.
但是由于又来了一个需求,我这封装无法满足,所以这里需要再修改下.


需求:
不要对返回的数据做处理
如 返回的数据为:

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


原先我会把先判断errorCode然后把data数据取出,转化为对应的对象. 现在需求是,直接把原来的数据返回.


由于预先处理的代码都是封装在OkHttp的拦截器中,所以也不方便传参数.
所以我这里以添加Head头参数的方式来判断是否要对返回的数据进行预先处理.
代码如下:

@POST @FormUrlEncoded Observable weexRequest(@Url String url , @FieldMap Mapparam,@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()); } }


以后可能还需要慢慢根据修改,不断去修改代码. 【Retrofit+RxJava完美封装(二)】完美封装其实并不完美,但是可以渐渐趋向完美.

    推荐阅读