RxJave的使用2

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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值