webview.loaddata不适用于android 9.0(api-29)

z5btuh9x  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(428)

我有一个文章应用程序,我在显示文章 WebView . 在android版本9.0(api-29)中 WebView 不起作用。应用程序在我的文章活动中没有显示任何内容。

mWebView.setVisibility(View.VISIBLE);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setMinimumFontSize(14);

String htmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
   + "<head>"
   + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"
   + "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"
   + "<style type=\"text/css\">body{color: #525252;} img {max-width: 100%; height: auto}</style>"
   + "</head>"
   + item.getContent() //content of item
   + "";

mWebView.loadData(htmlContent, "text/html; charset=utf-8", "UTF-8");

因此,如何解决这个问题?

x7rlezfr

x7rlezfr1#

您的html内容应该是base64或url编码的。您的html示例中有一个“#”,它会在某些webview版本上导致问题。
下面是一个base64编码的例子。

String htmlContent = "...";
String encodedHtml = Base64.encodeToString(htmlContent.getBytes(), Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");

下面是javadoc的详细信息。

c2e8gylq

c2e8gylq2#

android 9.0版也有同样的问题
此页上的文档(https://developer.android.com/about/versions/pie/android-9.0-migration)提到:
在android9中,用于java语言的utf-8解码器更加严格,并且遵循unicode标准。
所以我尝试将utf-8转换成base64并使用loaddata()

try {
       String base64 = null;
       base64 = android.util.Base64.encodeToString(lecureHtmlData.getBytes("UTF-8"),
                    android.util.Base64.DEFAULT);
       wvLecture.loadData(base64, "text/html; charset=utf-8", "base64");
    } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
    }

现在一切如常。
希望有帮助

vsaztqbk

vsaztqbk3#

我解决了我的问题,问题出现在智能手机,最新的铬。
解决方案:
不要使用 mWebview.loadData 方法,而不是使用 mWebview.loadDataWithBaseURL 因此,我的解决方案是: mWebview.loadDataWithBaseURL(null,htmlContent,"text/html", "utf-8", null);

相关问题