2016-05-06 10 views
0

私が観察を行いながら、プログレスバーを表示したい:サブスクリプションの開始時にダイアログを表示する方法は?

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()を実行する方法?

答えて

3
observable.subscribeOn(Schedulers.newThread()) 
      .doOnSubscribe(()->{showProgressBar();} 
      .subscribeOn(AndroidSchedulers.mainThread()) 
      .finallyDo(()-> {hideProgressBar();})   
      .observeOn(AndroidSchedulers.mainThread()) 

が有効です。副作用演算子は、それが何らかの呼び出しで呼び出されたときに同期的に実行します。 this gistおよびthis discussionを参照してください。

関連する問題