Retrofit+RxJava完美封装(二)

来源:互联网 发布:阿里云华东 编辑:程序博客网 时间:2024/06/06 11:36

前面一章已经完整的讲述了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
原创粉丝点击