Webview.loadData不工作的8.1和9.0

问题描述 投票:3回答:3

我有一篇文章的应用程序,我展示的网页流量的文章。在Android版本8.1和9.0这Webview是行不通的。这个应用程序显示在文章活动NOTHING。

            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");

其结果是,我怎么能解决这个问题?

java android webview android-webview android-9.0-pie
3个回答
9
投票

我解决我的问题,因为有最新的Chrome智能手机出现问题。

解:

不使用

mWebview.loadData

方法,而是使用

mWebview.loadDataWithBaseURL

其结果是我的解决办法是:

mWebview.loadDataWithBaseURL(null,htmlContent,"text/html", "utf-8", null);


7
投票

你的HTML内容应为Base64的或URL编码。你的HTML例子中有一个“#”,它会导致一些的WebView版本的问题。

下面是使用Base64编码技术的例子。

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

下面是详细javadoc


5
投票

我也有同样的问题与Android 9.0版

在此页面(https://developer.android.com/about/versions/pie/android-9.0-migration)的文件提到:

在Android中如图9所示,UTF-8解码器,用于Java语言是严格的,并遵循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();
    }

现在,它正在像往常一样。

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.