初始化配置參數按須要來配置java
RxHttp.initConfig(new ConfigModule() {
@Override
public void applyOptions(GlobalConfigBuild.Builder builder) {
builder
.addInterceptor(new LoggerInterceptor())
.baseurl("http://lf.snssdk.com/api/")
.setPaeseInfor(new ParseInfo("errorCode", "data", "errorMsg", "0"))
.setAPICallBack(new APICallBack() {
@Override
public String callback(String code, String resultData) {
return null;
}
});
}
});
複製代碼
框架是基於Rxjava的 因此能夠使用map操做符 去將接口返回的String 作一層過濾去獲取到返回數據的code mes data 這裏能夠對數據狀態進行統一判斷 數據獲取爭取返回字符串類型的data 固然也能夠將data json格式化以後再返回,這裏咱們這個map 只作數據狀態的判斷,下邊是整個狀態判斷的代碼android
RxHttp
.create() //一 .獲取BaseApi
.get("https://www.wanandroid.com/banner/json", SimpleParams.create().put("", "")) //二. 調用請求方法
.compose(Transformer.switchSchedulersArray(DataBean.class)) //三. 返回結果處理
.subscribe(new CommonObserver<List<DataBean>>(mBaseView) { //四.發起訂閱
@Override
public void onNext(List<DataBean> dataBeans) {
DataBean dataBean = dataBeans.get(0);
System.out.println(dataBean.getDesc());
}
@Override
protected void onError(int code, String mes) {
super.onError(code, mes);
System.out.println(code + "===" + mes);
}
});
複製代碼
這裏咱們直接使用 的BaseApi 固然咱們也能夠使用本身定義的APi 能夠調用creata()的另外一個有參方法 傳入咱們自定義的請求APi,自定義APi 返回值能夠是String 也能夠是業務實體. 若是是業務實體 那在compose裏能夠不使用咱們封裝的轉換方式,只須要作線程切換便可.能夠調用Transformer 的另外一個方法switchThread 值進行線程的切換. 若是返回值沒有基類的 code msg data 能夠直接使用能夠調用Transformer的switchSchedulersNoBase方法 直接轉成業務實體 自定義Api 使用方式以下git
RxHttp
.create(ApiServer.class)
.get("client_credentials",
"PPSSlAbaCYZpe8IhLQwWWinS",
"noqd2GKQmrpwhLu3hEuUi9X5cGQDfGw6")
.compose(Transformer.<ResToken>switchThread())
.subscribe(new CommonObserver<ResToken>(mBaseView) {
@Override
public void onNext(ResToken resToken) {
System.out.println(resToken.access_token);
}
@Override
protected void onError(int code, String mes) {
super.onError(code, mes);
System.out.println(code + "=====" + mes);
}
});
RxHttp
.create()
.get("https://aip.baidubce.com/oauth/2.0/token", SimpleParams.create()
.put("grant_type", "client_credentials")
.put("client_id", "PPSSlAbaCYZpe8IhLQwWWinS")
.put("client_secret", "noqd2GKQmrpwhLu3hEuUi9X5cGQDfGw6"))
.compose(Transformer.switchSchedulersNoBase(ResToken.class))
.observeOn(Schedulers.io())
.flatMap(new Function<ResToken, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(ResToken resToken) throws Exception {
System.out.println("============Token 請求成功");
ReqToken reqToken = new ReqToken();
reqToken.image = "2164728647816478264781242746127846";
reqToken.image_type = "BASE64";
reqToken.face_field = "age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities";
reqToken.max_face_num = "10";
reqToken.face_type = "LIVE";
reqToken.access_token = resToken.access_token;
return RxHttp
.create()
.post("https://aip.baidubce.com/rest/2.0/face/v3/detect", reqToken)
.compose(Transformer.<String>switchThread());
}
})
.subscribe(new CommonObserver<String>(mBaseView) {
@Override
public void onNext(String s) {
System.out.println("=======" + s);
}
@Override
protected void onError(int code, String mes) {
super.onError(code, mes);
}
});
}
複製代碼
生命週期使用jetpacK的 lifecycle 管理, 能夠在被訂閱者裏註冊lifecycle 監聽週期變化 也能夠自定義操做符來實現,能夠在Rxjava 訂閱時構造函數中傳入 Lifecycle對象進行註冊 ,在onSubscribe 回調中獲得 Disposable 在onDestroy中去對Disposable 作取消操做github
public abstract class BaseObserver<T> implements Observer<T>, LifecycleObserver {
/**
*要想實現生命週期的去掉訂閱操做必須傳入能夠獲取到lifeCycle 的對象
*
* @param lifecycle
*/
public BaseObserver(Object lifecycle) {
if (lifecycle != null) {
if (lifecycle instanceof AppCompatActivity) {
((AppCompatActivity) lifecycle).getLifecycle().addObserver(this);
return;
}
if (lifecycle instanceof Fragment) {
((Fragment) lifecycle).getLifecycle().addObserver(this);
return;
}
if (lifecycle instanceof Lifecycle) {
((Lifecycle) lifecycle).addObserver(this);
return;
}
}
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
BaseException apiException = null;
if (e instanceof BaseException) {
apiException = (BaseException) e;
} else {
apiException = getErrorType(e);
}
String message = apiException.getMessage();
int code = apiException.getCode();
onError(code, message);
}
@Override
public void onComplete() {
}
protected void onError(int code, String mes) {
}
protected BaseException getErrorType(Throwable e) {
return DefaultException.handleException(e);
}
private Disposable disposable;
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
private final void cancel(LifecycleOwner owner) {
if (this.disposable != null && !disposable.isDisposed()) {
disposable.dispose();
}
if (owner != null) {
owner.getLifecycle().removeObserver(this);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(LifecycleOwner owner) {
this.cancel(owner);
}
}
複製代碼
github地址express