如何封裝自己的網路框架 -進階封裝 (RxJava+okHttp+Retrofit)
阿新 • • 發佈:2019-01-04
一、進階封裝
①網路框架的使用
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()③Result的建立 介面返回的資料模型,response.getMsg()); } } }
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④CommException 異常的處理msg; } public void setRetMsg(String msg) { this.msg= msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
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); } }
到此結束,網路框架封裝簡單明瞭,很適合初學者.