RxAndroid 中的进度回调

Progress Callbacks In RxAndroid

开始使用 RxJava,我希望能够在我的订阅旁边显示一个进度条。

我使用 Observable.from 发射了 List 个实体。我想通过在 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 return 的过程中,我该如何更新我的 ProgressDialog 进度?

可能的解决方案

因为有一个ProgressDialog,我在主线程上运行这个并将ProgressDialog传递给Observable来更新。我相信这会奏效,但我想远离 ui 话题。

您可以使用

.doOnNext()

对于每个转换的元素和更改进度条。

如果你想多次更改,你需要在 entityToJSON(entity) 方法上执行此操作。但是 entityToJSONSchedulers.io() 线程上工作,您需要使用 runOnUiThread 方法或此方法中的 uiHandler
阅读更多:
Accessing views from other thread (Android)
与 UI 主题交流:https://developer.android.com/training/multiple-threads/communicate-ui.html