Webview.loadData не работает на 8.1 и 9.0 - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть приложение для статьи, я показываю статьи в веб-обозрении.В Android версии 8.1 и 9.0 это веб-представление не работает.Приложение показывает НИЧЕГО в статье активности.

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

В результате как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

У меня тоже была такая же проблема с 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();
    }

Теперь он работаеткак обычно.

Надеюсь, это поможет

0 голосов
/ 06 февраля 2019

Я решил свою проблему, проблема возникает в смартфонах с последней версией Chrome.

РЕШЕНИЕ:

Не используйте

mWebview.loadData

метод, вместо используйте

mWebview.loadDataWithBaseURL

В результате мое решение:

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

0 голосов
/ 06 февраля 2019

Ваш HTML-контент должен быть либо Base64, либо URL-кодом.В вашем примере HTML есть «#», и это вызывает проблему в некоторых версиях WebView.

Вот пример с кодировкой Base64.

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

Вот javadoc для деталей.

...