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への変換中に、更新可能な進行状況の更新を返すにはどうすればよいProgressDialog
ですか?
考えられる解決策
そこにある通りProgressDialog
まで、私は、メインスレッド上でこれを実行し、合格ProgressDialog
にObservable
更新します。これでうまくいくと思いますが、UIスレッドには近づかないようにしたいと思います。
あなたが使用することができます
.doOnNext()
変換された要素ごとに、プログレスバーを変更します。
複数回変更する場合は、entityToJSON(entity)
メソッドでこれを行う必要があります。ただしentityToJSON
、Schedulers.io()
スレッドで機能するため、userunOnUiThread
メソッドまたはuiHandler
このメソッドから使用する必要があります。
続きを読む:
他のスレッドからのビューへのアクセス(Android)
UIスレッドとの通信:https://developer.android.com/training/multiple-threads/communicate-ui.html
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加