RxAndroid中的进度回调

RxAndroid中的进度回调,android,rx-java,rx-android,Android,Rx Java,Rx Android,开始使用RxJava,我希望能够在订阅旁边显示进度条 我有一个列表,我使用Observable.from发射的实体。我想通过在flatMap中使用Observable将每个实体转换为JSONObject。请参阅下面的代码 Observable.from(entities) .flatMap(new Func1<Entity, Observable<JSONObject>>() { @Override

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

我有一个
列表
,我使用
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
                }
            });
可观察。来自(实体)
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(实体){
返回entityToJSON(实体);
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新操作1(){
@凌驾
公共作废调用(对象o){
//下一个
}
},新行动1(){
@凌驾
公共无效呼叫(可丢弃可丢弃){
printStackTrace();
Log.e(Log_标记,“Error:+throwable.getLocalizedMessage());
}
},新操作0(){//onComplete
@凌驾
公开作废通知(){
//未完成
}
});
我的问题

在转换为JSON的过程中,如何返回可以更新我的
ProgressDialog
的进度更新

可能的解决方案

由于有一个
ProgressDialog
启动,我在主线程上运行它,并将
ProgressDialog
传递给
Observable
进行更新。我相信这会起作用,但我不想使用ui线程。

您可以使用

.doOnNext()
对于每个转换的元素和更改进度条


如果需要多次更改,则需要在
entityToJSON(entity)
方法上执行此操作。但是
entityToJSON
Schedulers.io()
线程上工作,您需要使用
runOnUiThread
方法或此方法中的
uiHandler

阅读更多信息:

与UI线程通信:

您可以使用

.doOnNext()
对于每个转换的元素和更改进度条


如果需要多次更改,则需要在
entityToJSON(entity)
方法上执行此操作。但是
entityToJSON
Schedulers.io()
线程上工作,您需要使用
runOnUiThread
方法或此方法中的
uiHandler

阅读更多信息:


与UI线程通信:

如果我想为一个实体执行多次该怎么办?例如10%转换,然后20%等等/如果您想要多次更改,您需要在entityToJSON(实体)方法上执行此操作。但是entityToJSON在Schedulers.io()线程上工作,您需要使用runOnUiThread方法或此方法中的uiHandler。阅读更多:在订阅服务器中有一个
subscriber会很有用。onProgress(int progress)
回调在
subscriber中不是吗。请将上述评论添加到完整性的答案中,如果我想为一个实体重复多次该怎么办?例如10%转换,然后20%等等/如果您想要多次更改,您需要在entityToJSON(实体)方法上执行此操作。但是entityToJSON在Schedulers.io()线程上工作,您需要使用runOnUiThread方法或此方法中的uiHandler。阅读更多:在订阅服务器中有一个
subscriber会很有用。onProgress(int progress)
回调在
subscriber中不是吗。为了完整起见,请将上述评论添加到您的答案中