2015-10-30 50 views
1

開始使用RxJava,我希望能夠在我的訂閱旁邊顯示進度條。RxAndroid中的進度回調

我有一個List我使用Observable.from發出的實體。我想通過在flatMap中使用Observable將每個實體轉換爲JSONObject。請參閱下面的代碼。

Observable.from(entities) 
      .flatMap(new Func1<Entity, Observable<JSONObject>>() { 
       @Override 
       public Observable<JSONObject> call(Entity entity) { 
        return entityToJSON(entity); 
       } 
      }).subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Action1<Object>() { 
       @Override 
       public void call(Object o) { 
        // on next 
       } 
      }, new Action1<Throwable>() { 
       @Override 
       public void call(Throwable throwable) { 
        throwable.printStackTrace(); 
        Log.e(LOG_TAG,"Error: "+throwable.getLocalizedMessage()); 
       } 
      }, new Action0() { // onComplete 
       @Override 
       public void call() { 
        // onComplete 
       } 
      }); 

我的問題

如何,這種轉換成JSON返回期間的進展,我可以更新我的ProgressDialog與更新?

可能的解決方案

是有ProgressDialog起來,我在主線程上運行此並通過ProgressDialogObservable更新。我相信這會起作用,但我想停留在UI線程上。

回答

0

您可以使用

.doOnNext() 

對於每一個轉換元件,並更改進度條。

如果您想多次使用chage,您需要在entityToJSON(entity)方法上執行此操作。但entityToJSON適用於Schedulers.io()線程,並且您需要使用此方法的runOnUiThread方法或uiHandler
瞭解更多:
Accessing views from other thread (Android)
與UI線程通訊:https://developer.android.com/training/multiple-threads/communicate-ui.html

+0

如果我想多次做它一個實體?如10%轉換,然後20%etc/ – StuStirling

+0

如果你想要chage多次,你需要在entityToJSON(entity)方法上做到這一點。但entityToJSON在Schedulers.io()線程上工作,並且您需要使用此方法中的runOnUiThread方法或uiHandler。閱讀更多:http://stackoverflow.com/questions/8183111/accessing-views-from-other-thread-android – andrey7mel

+0

在'訂閱者'中有一個'subscriber.onProgress(int progress)'回調會很有用wouldn'它。請將上面的評論添加到您的答案完整性 – StuStirling