android progress+rxjava的套路代码
2023-03-21 本文已影响0人
吉凶以情迁
// 创建ProgressBar并设置样式
ProgressBar progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge);
progressBar.setIndeterminate(true);
// 创建AlertDialog并设置样式和进度条
AlertDialog alertDialog = new AlertDialog.Builder(context)
.setTitle("Loading...")
.setView(progressBar)
.setCancelable(false)
.create();
// 显示AlertDialog
alertDialog.show();
Observable.fromCallable(() -> {
// 执行耗时逻辑生成Model
return new PrintLabelModel();
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.to(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
.subscribe(new Observer<PrintLabelModel>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
// 可选操作,在订阅时执行
}
@Override
public void onNext(@NonNull PrintLabelModel model) {
// 在主线程中得到生成的Model
// TODO: 处理得到的model
}
@Override
public void onError(@NonNull Throwable e) {
// 处理发生的错误
}
@Override
public void onComplete() {
// 关闭ProgressDialog
alertDialog.dismiss();
}
});
api("com.uber.autodispose2:autodispose:2.1.1")
api("com.uber.autodispose2:autodispose-android:2.1.1")
api("com.uber.autodispose2:autodispose-androidx-lifecycle:2.1.1")
api("com.uber.autodispose2:autodispose-rxjava3:4.0.0-RC1")
``
在使用 AutoDispose 时,您可以选择使用 as 或 to 方法来绑定 Disposable 到指定的 ScopeProvider 上,二者的作用是相同的,都可以将 Disposable 绑定到指定的 ScopeProvider 上。
as 方法适用于 Observable 和 Flowable 对象,例如:
java
Copy code
Observable.interval(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this))) // 使用 as 方法绑定到生命周期
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// 处理 onNext 事件
}
});
to 方法适用于 Completable, Single, 和 Maybe 对象,例如:
java
Copy code
Single.just("Hello World")
.delay(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.to(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this))) // 使用 to 方法绑定到生命周期
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// 处理 onSuccess 事件
}
});
可以根据您使用的对象类型和个人喜好来选择 as 或 to 方法。
AlertDialog alertDialog = DialogUtils.getNewProgressDialog(this);
// 显示AlertDialog
alertDialog.show();
String printScript = SPUtils.getValue(SuperContext.getInstance(), ModelPrintUtil.key_name_materialbox_split, "");
Observable.fromCallable(() -> {
ScriptEngine scriptEngine = new ScriptEngine();
return scriptEngine.evaluate(printScript, new ScriptEngine.ParseCallBack() {
@Override
public void onPrint(String text) {
}
@Override
public void onError(Throwable error) {
}
@Override
public String onEachContent(String content) {
return null;
}
});
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.to(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
.subscribe(new Consumer<PrintLabelModel>() {
@Override
public void accept(PrintLabelModel model) throws Exception {
// 处理 onNext 事件,并关闭对话框
alertDialog.dismiss();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// 处理 onError 事件,并关闭对话框
alertDialog.dismiss();
ToastUtils.showToast(getThis(), "发生错误:" + throwable.getMessage());
}
});