android - 如何在 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();
}
解决方案
推荐阅读
- flutter - Flutter Firebase 通知给出多个错误
- react-native - 如何在我的反应本机代码中清除 redux 购物车
- reactjs - React Native - 如何更改一个元素的颜色?
- spring-boot - oauth2-oidc-sdk ParseException:“不接受无算法”
- javascript - 如何阻止我的团队在 React 中使用原始字符串作为 JSX 子项?
- regex - 在记事本++中以n个字符完成整个单词的拆分短语
- sql - MariaDB:COUNT DISTINCT 是否被窃听?
- c# - 使用方法转义 XML 时出现 System.OutOfMemoryException
- java - 使用 jsoup 解析 londonstockexchange 页面
- java - 如何找到价格的平均值?