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

来源:互联网 发布:简单java小程序代码 编辑:程序博客网 时间:2024/06/05 11:34

一、进阶封装

①网络框架的使用

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);    }}

到此结束,网络框架封装简单明了,很适合初学者.





阅读全文
1 0