1.使用compose操作符,消除重复代码
ObservableTransformer schedulersTransformer = new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return ((Observable) upstream).subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
使用:
Observable.省略响应代码.compose(schedulersTransformer);
主要是用于RXJava与Retrofit请求网络时,在IO线程处理网络请求数据,在主线程更新数据和设置页面
2.使用compose操作符,处理网络请求及校验返回请求
1)校验服务器返回的数据是否成功,先自定义一个函数处理
public class CheckResponseFunc<T> implements Function<BaseResponse<T>,T> {
@Override
public T apply(BaseResponse<T> response) throws Exception {
if (!response.isOk()){
throw new ExceptionHandle.ServerException(response.getResultcode(),response.getReason());
//这里是自定义一个错误返回,只要是不是正确数据返回的都按错误处理
}
return response.getResult();
}
}
BaseResponse是后台返回数据的基本格式
public class BaseResponse<T> {
private String error_code;
private String reason;
private String resultcode;
private T result;
...下面是get / set...
//正确数据的校验
public boolean isOk() {
return TextUtils.equals(resultcode,"200");
}
}
2)处理网络请求的相关提示,自定义一个处理网络请求的函数
public class HttpResponseFunc<T> implements Function<Throwable,Observable<T>> {
@Override
public Observable<T> apply(Throwable throwable) throws Exception {
return Observable.error(ExceptionHandle.handleException(throwable));
}
}
ExceptionHandle.handleException(throwable) 这里面都是处理相应的错误提示及设置相应的错误code
3)用法
public class ErrorTransformer<T> implements ObservableTransformer {
@Override
public ObservableSource apply(Observable upstream) {
return upstream.map(new CheckResponseFunc<T>()).onErrorResumeNext(new HttpResponseFunc<T>());
}
}
CheckResponseFunc函数里面抛出的错误异常也是在HttpResponseFunc函数里面处理的
最后使用也是像上面那样
Observable.省略响应代码.compose(new ErrorTransformer());