package com.zhengsr.viewpagerhelper.rx; import com.zhengsr.viewpagerhelper.bean.BaseResponse; import org.reactivestreams.Publisher; import io.reactivex.Flowable; import io.reactivex.FlowableTransformer; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.ObservableSource; import io.reactivex.ObservableTransformer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; /** * @author by zhengshaorui on 2019/10/9 * Describe: */ public class RxUtils { /** * 封装线程调度 * @param <T> * @return */ public static <T> ObservableTransformer<T,T> rxScheduers(){ return new ObservableTransformer<T,T>(){ @Override public ObservableSource<T> apply(Observable<T> upstream) { return upstream.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } }; } public static <T>FlowableTransformer<T,T> flScheduers(){ return new FlowableTransformer<T, T>() { @Override public Publisher<T> apply(Flowable<T> upstream) { return upstream.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } }; } /** * 得到 Observable * @param <T> 指定的泛型类型 * @return Observable */ private static <T> Observable<T> createData(final T t) { return Observable.create(new ObservableOnSubscribe<T>() { @Override public void subscribe(ObservableEmitter<T> emitter) throws Exception { emitter.onNext(t); emitter.onComplete(); } }); } /** * 统一返回结果处理 * @param <T> 指定的泛型类型 * @return ObservableTransformer */ public static <T> ObservableTransformer<BaseResponse<T>, T> handleResult() { return new ObservableTransformer<BaseResponse<T>, T>() { @Override public ObservableSource<T> apply(Observable<BaseResponse<T>> upstream) { return upstream.flatMap(new Function<BaseResponse<T>, ObservableSource<T>>() { @Override public ObservableSource<T> apply(BaseResponse<T> baseResponse) throws Exception { if (baseResponse.getErrorCode() == BaseResponse.SUCCESS && baseResponse.getData() != null ) { return createData(baseResponse.getData()); } else { return Observable.error(new Exception(baseResponse.getErrorMsg())); } } }); } }; } }