1. 程式人生 > >如何封裝自己的網路框架 -進階封裝 (RxJava+okHttp+Retrofit)

如何封裝自己的網路框架 -進階封裝 (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);
}
}

到此結束,網路框架封裝簡單明瞭,很適合初學者.