开始使用RxJava,我希望能够在我的订阅旁边显示进度条。
我使用List
发出Observable.from
个实体。我想在JSONObject
中使用Observable
将每个实体转换为flatMap
。请参阅下面的代码。
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期间,如何返回可以使用?{/ p>更新ProgressDialog
的进度更新?
可能的解决方案
由于有ProgressDialog
,我在主线程上运行此操作并将ProgressDialog
传递给Observable
进行更新。我相信这会起作用,但我想避开ui线程。
答案 0 :(得分: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