開始使用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
起來,我在主線程上運行此並通過ProgressDialog
到Observable
更新。我相信這會起作用,但我想停留在UI線程上。
如果我想多次做它一個實體?如10%轉換,然後20%etc/ – StuStirling
如果你想要chage多次,你需要在entityToJSON(entity)方法上做到這一點。但entityToJSON在Schedulers.io()線程上工作,並且您需要使用此方法中的runOnUiThread方法或uiHandler。閱讀更多:http://stackoverflow.com/questions/8183111/accessing-views-from-other-thread-android – andrey7mel
在'訂閱者'中有一個'subscriber.onProgress(int progress)'回調會很有用wouldn'它。請將上面的評論添加到您的答案完整性 – StuStirling