package com.codeest.geeknews.util; import com.codeest.geeknews.model.http.exception.ApiException; import com.codeest.geeknews.model.http.response.GankHttpResponse; import com.codeest.geeknews.model.http.response.GoldHttpResponse; import com.codeest.geeknews.model.http.response.MyHttpResponse; import com.codeest.geeknews.model.http.response.WXHttpResponse; import io.reactivex.BackpressureStrategy; import io.reactivex.Flowable; import io.reactivex.FlowableEmitter; import io.reactivex.FlowableOnSubscribe; import io.reactivex.FlowableTransformer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; /** * Created by codeest on 2016/8/3. */ public class RxUtil { /** * 统一线程处理 * @param <T> * @return */ public static <T> FlowableTransformer<T, T> rxSchedulerHelper() { //compose简化线程 return new FlowableTransformer<T, T>() { @Override public Flowable<T> apply(Flowable<T> observable) { return observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } }; } /** * 统一返回结果处理 * @param <T> * @return */ public static <T> FlowableTransformer<GankHttpResponse<T>, T> handleResult() { //compose判断结果 return new FlowableTransformer<GankHttpResponse<T>, T>() { @Override public Flowable<T> apply(Flowable<GankHttpResponse<T>> httpResponseFlowable) { return httpResponseFlowable.flatMap(new Function<GankHttpResponse<T>, Flowable<T>>() { @Override public Flowable<T> apply(GankHttpResponse<T> tGankHttpResponse) { if(!tGankHttpResponse.getError()) { return createData(tGankHttpResponse.getResults()); } else { return Flowable.error(new ApiException("服务器返回error")); } } }); } }; } /** * 统一返回结果处理 * @param <T> * @return */ public static <T> FlowableTransformer<WXHttpResponse<T>, T> handleWXResult() { //compose判断结果 return new FlowableTransformer<WXHttpResponse<T>, T>() { @Override public Flowable<T> apply(Flowable<WXHttpResponse<T>> httpResponseFlowable) { return httpResponseFlowable.flatMap(new Function<WXHttpResponse<T>, Flowable<T>>() { @Override public Flowable<T> apply(WXHttpResponse<T> tWXHttpResponse) { if(tWXHttpResponse.getCode() == 200) { return createData(tWXHttpResponse.getNewslist()); } else { return Flowable.error(new ApiException(tWXHttpResponse.getMsg(), tWXHttpResponse.getCode())); } } }); } }; } /** * 统一返回结果处理 * @param <T> * @return */ public static <T> FlowableTransformer<MyHttpResponse<T>, T> handleMyResult() { //compose判断结果 return new FlowableTransformer<MyHttpResponse<T>, T>() { @Override public Flowable<T> apply(Flowable<MyHttpResponse<T>> httpResponseFlowable) { return httpResponseFlowable.flatMap(new Function<MyHttpResponse<T>, Flowable<T>>() { @Override public Flowable<T> apply(MyHttpResponse<T> tMyHttpResponse) { if(tMyHttpResponse.getCode() == 200) { return createData(tMyHttpResponse.getData()); } else { return Flowable.error(new ApiException(tMyHttpResponse.getMessage(), tMyHttpResponse.getCode())); } } }); } }; } /** * 统一返回结果处理 * @param <T> * @return */ public static <T> FlowableTransformer<GoldHttpResponse<T>, T> handleGoldResult() { //compose判断结果 return new FlowableTransformer<GoldHttpResponse<T>, T>() { @Override public Flowable<T> apply(Flowable<GoldHttpResponse<T>> httpResponseFlowable) { return httpResponseFlowable.flatMap(new Function<GoldHttpResponse<T>, Flowable<T>>() { @Override public Flowable<T> apply(GoldHttpResponse<T> tGoldHttpResponse) { if(tGoldHttpResponse.getResults() != null) { return createData(tGoldHttpResponse.getResults()); } else { return Flowable.error(new ApiException("服务器返回error")); } } }); } }; } /** * 生成Flowable * @param <T> * @return */ public static <T> Flowable<T> createData(final T t) { return Flowable.create(new FlowableOnSubscribe<T>() { @Override public void subscribe(FlowableEmitter<T> emitter) throws Exception { try { emitter.onNext(t); emitter.onComplete(); } catch (Exception e) { emitter.onError(e); } } }, BackpressureStrategy.BUFFER); } }