package com.anthony.library.utils; import com.anthony.library.data.net.ApiException; import com.anthony.library.data.net.HttpResult; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by Anthony on 2016/11/28. * Class Note: */ public class RxUtils { public static <T> Observable.Transformer<T, T> rxSchedulerHelper() { return tObservable -> tObservable.subscribeOn(Schedulers.io()) .unsubscribeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()); } public static <T> Observable.Transformer<T, T> defaultSchedulers() { return new Observable.Transformer<T, T>() { @Override public Observable<T> call(Observable<T> tObservable) { return tObservable.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()); } }; } public static <T> Observable.Transformer<T, T> all_io() { return new Observable.Transformer<T, T>() { @Override public Observable<T> call(Observable<T> tObservable) { return tObservable.observeOn(Schedulers.io()).subscribeOn(Schedulers.io()); } }; } /** * 统一返回结果处理 * * @param <T> * @return */ public static <T> Observable.Transformer<HttpResult<T>, T> handleResult() { //compose判断结果 return httpResponseObservable -> httpResponseObservable.flatMap(new Func1<HttpResult<T>, Observable<T>>() { @Override public Observable<T> call(HttpResult<T> result) { if (result.code == 200) { return createData(result.response); } else { return Observable.error(new ApiException("服务器返回error")); } } }); } /** * 生成Observable * * @param <T> * @return */ public static <T> Observable<T> createData(final T t) { return Observable.create(new Observable.OnSubscribe<T>() { @Override public void call(Subscriber<? super T> subscriber) { try { subscriber.onNext(t); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }); } }