美文网首页
android progress+rxjava的套路代码

android progress+rxjava的套路代码

作者: 吉凶以情迁 | 来源:发表于2023-03-21 15:45 被阅读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());
                            }
                        });

    相关文章

      网友评论

          本文标题:android progress+rxjava的套路代码

          本文链接:https://www.haomeiwen.com/subject/forcrdtx.html