您的位置:首页 > 理论基础 > 计算机网络

如何封装自己的网络框架 -进阶封装 (RxJava+okHttp+Retrofit)

2017-06-08 11:20 603 查看
一、进阶封装

①网络框架的使用

mService.getAppVersion() //通过service 调用方法
.subscribeOn(Schedulers.io()) //指定请求执行的环境
.observeOn(AndroidSchedulers.mainThread())//指定结果请求的环境
.map(new ResultFilter<>()) // 对结果进行过滤
.subscribe(new BaseNetSubscriber<>(mActivity, AppVersionBean-> {
//TODO  处理请求的结果  此处 采用 java 8  特性 箭头函数
}));


②结果的过滤

public class ResultFilter<T> implements Func1<Result<T>, T> { //Result 就是接口返回数据的模型

@Override
public T call(Result<T> response) {
if (IFlagCode.successCode == response.getFlag()) {//成功的处理
return response.getData();
} else {//异常的处理
throw new CommException(response.getFlag(),response.getMsg());
}
}
}

③Result的创建     接口返回的数据模型

public class Result<T>{
private int flag;
private String msg;
private T data;

public int getFlag() {
return flag;
}

public void setFlag(int flag) {
this.flag = flah;
}

public String getMsg() {
return msg;
}

public void setRetMsg(String msg) {
this.msg= msg;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}
}

④CommException      异常的处理

public class CommException extends RuntimeException {
public CommException(int flag, String msg) {
super(CommprocessCode(flag, msg));
}

private static String CommprocessCode(int flag, String msg) {
ToastUtils.showMsg(retMsg);
return msg;
}
}

⑤IFlagCode   判断接口成功的枚举

public interface IFlagCode {
int successCode = 1; //根据后台返回的结果 设置
}


⑥BaseNetSubscriber  网络的拦截处理

public class BaseNetSubscriber<T> extends Subscriber<T> {

private Activity mActivity;
private SuccessCallback<T> mCallback;

public BaseNetSubscriber(Activity activity, SuccessCallback<T> mCallback) {
this.mActivity = activity;
this.mCallback = mCallback;
}

@Override
public void onStart() {
//网络请求开始
if (!NetWorkUtils.isConnected(BaseApp.application)) {//网络是否连接
ToastUtils.show("网络未连接");
return;
}
//其他处理
}

@Override
public void onCompleted() {
//网络请求结束
}

@Override
public void onNext(T t) {
//网络请求成功
mCallback.callback(t);
}

@Override
public void onError(Throwable e) {//网络请求错误
try {
if (!(e instanceof CommException)) {
ToastUtils.show("网络异常");
e.printStackTrace();
}
//其他处理
} catch (Throwable throwable) {
throwable.printStackTrace();
}

}

//成功的回调
public interface SuccessCallback<T> {
void callback(T t);
}
}


到此结束,网络框架封装简单明了,很适合初学者.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: