RxJava的Observer的接口回调方法如下:
Subscriber<String> subsciber = new Subscriber<String>() {
@Override
public void onCompleted() {
Log.d("tag", "onCompleted()");
}
@Override
public void onError(Throwable e) {
Log.d("tag", "onError() e=" + e);
}
@Override
public void onNext(String s) {
Log.d("tag", "onNext() data=" + s);
}
}
但是在onNext()我们拿到数据的同时,要在主线程赋值给控件,这时候就会报错,因为RxJava默认的数据回调是在子线程中的。
所以,我们要在代码中添加如下两行代码:
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
整个方法如下:
//请求网络数据
public void getData(BaseRequestBean baseRequestBean, Observable<Object> observable, final IBaseModel.onGetDataFinishedListener listener){
if(baseRequestBean!=null&&!StringUtils.isEmpty(baseRequestBean.getRequest_url())){
if(mCompositeSubscription!=null){
mCompositeSubscription.add(observable
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onCompleted() {
listener.onComplete();
}
@Override
public void onError(Throwable e) {
listener.onError("出错了");
}
@Override
public void onNext(Object result) {
listener.onSuccess(result);
}
})
);
}
}else{
listener.onError("");
}
}
这样就不会造成线程的阻塞了。
最近在搭建个人的
项目地址: 的架构代码,遇到这个问题,故记录在此。https://github.com/xuwennengcan/canUtils