RxJava請求資料的回撥方法在主執行緒處理
阿新 • • 發佈:2019-01-24
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