简书链接:androidprogressrxjava的套路代码
文章字数:298,阅读全文大约需要1分钟

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 创建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());
                        }
                    });