Nic*_*hek 0 java android rx-java rx-android
我想在执行 Observable 时显示 ProgressBar:
Observable<T> observable;
Observer<T> observer;
...................
observable.doOnSubscribe(()->{showProgressBar();}
.finallyDo(()-> {hideProgressBar();})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
...................
protected void showProgressBar() {
if (mProgressBar != null)
mProgressBar.setVisibility(View.VISIBLE);
}
protected void hideProgressBar() {
if (mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
;
但我收到此错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Run Code Online (Sandbox Code Playgroud)
在线的 mProgressBar.setVisibility(View.VISIBLE);
如何运行showProgressBar()的doOnSubscribe()?
observable.subscribeOn(Schedulers.newThread())
.doOnSubscribe(()->{showProgressBar();}
.subscribeOn(AndroidSchedulers.mainThread())
.finallyDo(()-> {hideProgressBar();})
.observeOn(AndroidSchedulers.mainThread())
Run Code Online (Sandbox Code Playgroud)
应该管用。副作用运算符在任何调用它的线程上同步执行,因此只需向后工作。请参阅此要点和此讨论。