前面一章已经完整的讲述了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完美封装(二)】完美封装其实并不完美,但是可以渐渐趋向完美.