如何在订阅开始时显示对话框?
How to show dialog on start of subscribe?
我想在执行 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);
}
;
但我收到此错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
在线mProgressBar.setVisibility(View.VISIBLE);
如何从 doOnSubscribe()
运行 showProgressBar()
?
observable.subscribeOn(Schedulers.newThread())
.doOnSubscribe(()->{showProgressBar();}
.subscribeOn(AndroidSchedulers.mainThread())
.finallyDo(()-> {hideProgressBar();})
.observeOn(AndroidSchedulers.mainThread())
应该可以。副作用运算符在调用它的任何线程上同步执行,因此只需向后工作。参见 this gist and this discussion。
我想在执行 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);
}
;
但我收到此错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
在线mProgressBar.setVisibility(View.VISIBLE);
如何从 doOnSubscribe()
运行 showProgressBar()
?
observable.subscribeOn(Schedulers.newThread())
.doOnSubscribe(()->{showProgressBar();}
.subscribeOn(AndroidSchedulers.mainThread())
.finallyDo(()-> {hideProgressBar();})
.observeOn(AndroidSchedulers.mainThread())
应该可以。副作用运算符在调用它的任何线程上同步执行,因此只需向后工作。参见 this gist and this discussion。