首页 > 解决方案 > 如何在 android 中使用 Rxjava 发出的数据处理 webview?

问题描述

每当我单击按钮时,webview 都会加载一些数据(使用 rxjava 调用来自 api 的数据)
问题是如果我单击按钮第二次加载上一个数据(第一次加载数据),如果我单击第三次加载新数据,则再次加载。所以每当我尝试第二次加载相同的数据时。在我看来,第二次也从发出的值中获取数据如何避免这种情况?

setupWebviewHtml(htmlCode, application)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleSubscriber<String>() {
                @SuppressLint("SetJavaScriptEnabled")
                @Override
                public void onSuccess(String html) {
                    final WebView webView = new WebView(application);
                    webView.setWebChromeClient(new LoggingWebChromeClient(context,vPercentage,vTrackingUrl));
                    final WebSettings webSettings = webView.getSettings();
                    webSettings.setJavaScriptEnabled(true);
                    webView.setWebViewClient(new WebViewClient() {
                        @Override
                        public void onPageFinished(WebView view, String url) {
                            subject.onNext(webView);
                        }

                        @Override
                        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                            if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
                                context.startActivity(
                                        new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                                return true;
                            } else {
                                return false;
                            }
                        }
                    });
                    webView.loadDataWithBaseURL("", html, "text/html", "utf-8", null);
                }

                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onError(Throwable error) {
                    setupAdHtmlErrorHandler(application, error);
                }
            });

我们可以大张旗鼓地声明

private static final BehaviorSubject<WebView> subject = BehaviorSubject.create();

发射数据

public @NonNull Single<WebView> getPreloadedWebView() {
        return subject.take(1).toSingle();
    }

标签: androidrx-javarx-java2

解决方案


推荐阅读