gpt4 book ai didi

android - 我想在 RxJava 中使用进度条,就像在 AsyncTask 中一样

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:11 35 4
gpt4 key购买 nike

我想在 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;
}

我的 Activity :

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() 方法?

最佳答案

下面是我的做法:

public final class ProgressOrResult<T> {
final int progress;
final T result;
public ProgressOrResult(int progress, T result) {
this.progress = progress;
this.result = result;
}
}

ProgressDialog ringProgressDialog = ProgressDialog.show(
context, "MyProgressBarTitle", "Working please wait", true, false);


Observable.fromEmitter((Emitter<ProgressOrResult> emitter) -> {
// generate "progress"
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
emitter.onNext(new ProgressOrResult(i, null));
Thread.sleep(1);
}
// generate "result"
emitter.onNext(new ProgressOrResult(100, sum));
emitter.onComplete();

}, BackpressureMode.BUFFER)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (pr.result == null) {
ringProgressDialog.setProgress(pr.progress);
} else {
ringProgressDialog.dismiss();

// process the result here
}
}, error -> {
// handle error here
})

关于android - 我想在 RxJava 中使用进度条,就像在 AsyncTask 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42322381/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com