package com.zcy.ghost.vivideo.utils; import android.text.TextUtils; import com.zcy.ghost.vivideo.model.bean.GankHttpResponse; import com.zcy.ghost.vivideo.model.net.ApiException; import com.zcy.ghost.vivideo.model.net.VideoHttpResponse; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Description: RxUtil * Creator: yxc * date: 2016/9/21 18:47 */ public class RxUtil { /** * 统一线程处理 * * @param <T> * @return */ public static <T> Observable.Transformer<T, T> rxSchedulerHelper() { //compose简化线程 return new Observable.Transformer<T, T>() { @Override public Observable<T> call(Observable<T> observable) { return observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } }; } /** * 统一返回结果处理 * * @param <T> * @return */ public static <T> Observable.Transformer<VideoHttpResponse<T>, T> handleResult() { //compose判断结果 return new Observable.Transformer<VideoHttpResponse<T>, T>() { @Override public Observable<T> call(Observable<VideoHttpResponse<T>> httpResponseObservable) { return httpResponseObservable.flatMap(new Func1<VideoHttpResponse<T>, Observable<T>>() { @Override public Observable<T> call(VideoHttpResponse<T> videoHttpResponse) { if (videoHttpResponse.getCode() == 200) { return createData(videoHttpResponse.getRet()); } else if (!TextUtils.isEmpty(videoHttpResponse.getMsg())) { return Observable.error(new ApiException("*" + videoHttpResponse.getMsg())); } else { return Observable.error(new ApiException("*" + "服务器返回error")); } } }); } }; } public static <T> Observable.Transformer<GankHttpResponse<T>, T> handleGankResult() { //compose判断结果 return new Observable.Transformer<GankHttpResponse<T>, T>() { @Override public Observable<T> call(Observable<GankHttpResponse<T>> httpResponseObservable) { return httpResponseObservable.flatMap(new Func1<GankHttpResponse<T>, Observable<T>>() { @Override public Observable<T> call(GankHttpResponse<T> tGankHttpResponse) { if(!tGankHttpResponse.getError()) { return createData(tGankHttpResponse.getResults()); } 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); } } }); } }