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)
方法上执行此操作。但是 entityToJSON
在 Schedulers.io()
线程上工作,您需要使用 runOnUiThread
方法或此方法中的 uiHandler
。
阅读更多:
Accessing views from other thread (Android)
与 UI 主题交流:https://developer.android.com/training/multiple-threads/communicate-ui.html
开始使用 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)
方法上执行此操作。但是 entityToJSON
在 Schedulers.io()
线程上工作,您需要使用 runOnUiThread
方法或此方法中的 uiHandler
。
阅读更多:
Accessing views from other thread (Android)
与 UI 主题交流:https://developer.android.com/training/multiple-threads/communicate-ui.html