【发布时间】:2023-03-14 10:34:01
【问题描述】:
我想在 android 中用 RxJava 替换我的 AsyncTask。我当前的 AsyncTask 是这样的:
public class ProgressBarAsyncTask extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
ringProgressDialog = ProgressDialog.show(context,"MyProgressBarTitle","Working please wait",true, false);
}
@Override
protected Void doInBackground(Void... void) {
//do work
myTask();
return null;
}
@Override
protected void onPostExecute(Void void) {
super.onPostExecute();
ringProgressDialog.dismiss();
}
}
这是我的 RxJava 替代品:
public static Observable<Void> getObservable(final Context context,final String... params) {
return Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
return Observable.just(myTask());
}
});
}
public static Subscriber<Void> getSubscriber() {
Subscriber<Void> subscriber = new Subscriber<Void>() {
@Override
public void onCompleted() {
ringProgressDialog.dismiss();
}
@Override
public void onError(Throwable e) {
Log.d(TAG,e.toString());
}
@Override
public void onNext(Void aVoid) {
manipulateData();
}
};
return subscriber;
}
我的活动:
public class MainActivity extends Activity {
private ProgressDialog ringProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GetNumberObservable.Observable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()))
.subscribe(getSubscriber());
}
}
如何在启动 progressDialog 的 AsyncTask 中模拟 onPreExecute() 方法?
【问题讨论】:
-
使用 doOnNext() 方法
-
@Tuby 你是怎么做到的?
-
查找这个类github.com/TwistedEquations/android-rxmvp-tutorial/blob/master/…,它使用doOnNext设置showLoading为true,开启进度条,你可以在这个方法中调用ringProgressDialog.show()。
标签: android android-asynctask rx-java progressdialog