RxAndroid中的进度回调

时间:2015-10-30 14:40:04

标签: android rx-java rx-android

开始使用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线程。

1 个答案:

答案 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