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

一、进阶封装

①网络框架的使用

	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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值