二、BaseResponse与BaseObserver的封装
一、前言
由于《Rxjava+Retrofit网络请求框架封装(一)》篇幅太长、防止朋友们看的太累,产生视觉疲劳。所以把基础部分和封装部分-分开写。这篇主要是实现如何更简单的去实现网络请求,提高项目后期优化和维护效率。当然有更多的好处,自己细细体会。
作者不善言语,只做粗略描述,见谅!见谅!
二、BaseResponse与BaseObserver的封装
BaseResponse是个人自定义命名的一个类,主要用来对返回数据进行抽象。
BaseObserver是对返回数据的基础数据部分进行统一处理。
为什么要对返回数据进行抽象呢?
大部分公司后台接口返回数据都遵循一定的规范:个人粗略理解分为:基础数据与需求数据
基于上一篇的基础介绍,我们可以获取到后台请求数据如下。
简单理解就是基础数据部分key值不会改变
而需求数据部分也就是Demo里面的数据会根据不同的需求而改变
BaseResponse就是对基础数据进行封装处理。
实现步骤:
1、根据基础数据定义BaseResponse
2、修改API接口返回数据类型
3、对基础数据统一处理
1、根据基础数据定义BaseResponse
public class BaseResponse<T> {
private int res_code;
private String err_msg;
private T demo;
public int getRes_code() {
return res_code;
}
public void setRes_code(int res_code) {
this.res_code = res_code;
}
public String getErr_msg() {
return err_msg;
}
public void setErr_msg(String err_msg) {
this.err_msg = err_msg;
}
public T getDemo() {
return demo;
}
public void setDemo(T demo) {
this.demo = demo;
}
}
当然我们需求数据也需重新定义
public class Demo {
@Override
public String toString() {
return "Demo{" + "id='" + id + '\'' +
", appid='" + appid + '\'' +
", name='" + name + '\'' +
", showtype='" + showtype + '\'' +
'}';
}
private String id;
private String appid;
private String name;
private String showtype;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getShowtype() {
return showtype;
}
public void setShowtype(String showtype) {
this.showtype = showtype;
}
}
2、修改API接口返回数据类型
// @GET(Constans.retrofit)
// Observable<Bean> getRetrofit1();
// 把原先的Bean类分成BaseResponse基础数据与Demo需求数据两个类
@GET(Constans.retrofit)
Observable<BaseResponse<Demo>> getRetrofit2();
3、对基础数据统一处理
/**
* 创建Base抽象类实现Observer
*/
public abstract class BaseObserver<T> implements Observer<BaseResponse<T>> {
private static final String TAG = "BaseObserver";
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "onSubscribe: " );
}
@Override
public void onNext(BaseResponse<T> response) {
//在这边对 基础数据 进行统一处理 举个例子:
if(response.getRes_code()==200){
onSuccess(response.getDemo());
}else{
onFailure(null,response.getErr_msg());
}
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "Throwable: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: " );
}
public abstract void onSuccess(T demo);
public abstract void onFailure(Throwable e,String errorMsg);
}
请求网络数据
retrofit.create(ApiUrl.class)
.getRetrofit2()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//绑定生命周期
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new BaseObserver<Demo>(){
@Override
public void onSuccess(Demo demo) {
Log.e(TAG, "onSuccess: "+demo);
}
@Override
public void onFailure(Throwable e, String errorMsg) {
Log.e(TAG, "onFailure: "+errorMsg);
}
});
//打印结果: onSuccess: Demo{id='1001', appid='1021', name='sss', showtype='text'}
对返回数据的处理写到这里就结束了、不知道朋友看懂没。
看不懂? 没关系,敲代码实现一下好理解
还是看不懂? 那就多敲几遍。。。。再看不懂 去把作者拉出来溜溜
三、RxHelper调度类封装
忘了从哪里抄来的,这里简单介绍一下。
RxHelper主要是对执行线程和绑定生命周期几个方法进行封装,