Как передать строку html в веб-просмотр на Android

145

Привет, я разбираю xml, а затем загружаю его в веб-представление, после синтаксического анализа я создаю четыре строки, чтобы я мог добавить всю строку в одно представление. Я могу получить два представления в веб-представлении, но не первые две строки.

Пожалуйста, предложите мне мой код, где я ошибаюсь и как правильно получить отформатированные строки html в веб-представлении. Пожалуйста, взгляните на мой код и помогите мне решить эту проблему.

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        String chapterTitle = "";
        String SubChapterTitle="";
        String chapterIntro ="";
        String chapterContent="";
        View view = convertView;
        if (convertView == null) {
            // view = inflater.inflate(resourceid, null);
            view = getLayoutInflater().inflate(R.layout.webviewitem, null);
        }
        synchronized (view) {
            WebView wv = (WebView) view.findViewById(R.id.contentWebView);

            WebSettings settings = wv.getSettings();
            settings.setUseWideViewPort(true);
            settings.setLoadWithOverviewMode(true);
            settings.setJavaScriptEnabled(true);
            settings.setDefaultZoom(ZoomDensity.FAR);
            // wv.setBackgroundColor(0);
            wv.setVerticalScrollBarEnabled(false);
            wv.setHorizontalScrollBarEnabled(false);
            /*String txtChapTitle = Intro.book.getsecretList().get(position)
                    .getChtitle().toString();*/

            if (!(Intro.book.getsecretList().get(position).getChtitle()
                    .toString().equals(""))){
            chapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
            .getChtitle().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getSubtitle() == null)) {
                SubChapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
                .getSubtitle().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getIntro() == null)) {
            chapterIntro = "<b><fontSize=2>"+Intro.book.getsecretList().get(position)
                .getIntro().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getContent() == null)) {
            chapterContent = "<fontSize=2>"+Intro.book.getsecretList().get(position)
                .getContent().toString()+"</font>";
            }

            StringBuilder content = new StringBuilder();
            content.append(chapterTitle+SubChapterTitle+chapterIntro+chapterContent);

            JsInterface Jsi = new JsInterface();
            Jsi.wordDef = content ;
            Log.v("Content", "" +content);
            wv.addJavascriptInterface(Jsi, "interfaces");

            wv.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    view.setHapticFeedbackEnabled(false);
                }
            });

            wv.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url,
                        String message, JsResult result) {
                    return super.onJsAlert(view, url, message, result);
                }
            });

            wv.loadUrl("file:///android_asset/wordview.html");
        }
        return view;
    }
}

Я могу получить chapterIntro и chaptercontent в веб-представлении, но не первые две строки, пожалуйста, помогите мне, друзья.

кавалло
источник

Ответы:

198

Я успешно сделал по строке ниже

 //data == html data which you want to load
 String data = "Your data which you want to load";

 WebView webview = (WebView)this.findViewById(R.id.webview);
 webview.getSettings().setJavaScriptEnabled(true);
 webview.loadData(data, "text/html; charset=utf-8", "UTF-8");

Или вы можете попробовать

 webview.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
Панчал Амит
источник
вы добавляете это в <head> на index.php / index.html?
Mthe beseti
1
да, если хочешь, иначе все будет хорошо
Панчал Амит
Он обновляет пользовательский интерфейс после небольшой задержки. Как это исправить?
Нарендра Сингх,
могу ли я использовать «text / html», «UTF-8», если я хочу передать html в функцию javascript с помощью webView.loadUrl («javascript: MyFunction (data,« text / html »,« UTF-8 »)?
user1788736
Нет, я так не использовал
Панчал Амит
170

Чтобы загрузить ваши данные в WebView. Вызов метода loadData () WebView

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

Вы можете проверить этот пример

http://developer.android.com/reference/android/webkit/WebView.html

Арслан Анвар
источник
я пробовал с этим, все еще не происходит также пробовал с loadbaserul
cavallo
это должно работать со строкой, содержащей javascript? У меня не работает
Эду
27
так и должно бытьwebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Ярослав
6
«Text / html; charset = utf-8» имеет большое значение, без него символы символов не отображаются должным образом.
Mic Fok
31

Лучше передать null. Полные коды выглядят так:

WebView wv = (WebView)this.findViewById(R.id.myWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL(null, "<html>...</html>", "text/html", "utf-8", null);
Джеффри Нео
источник
вы добавляете это в <head> на index.php / index.html?
Mthe beseti
@mthelelibeseti - это коды Android, а не HTML. Или я неправильно понял ваш вопрос?
Джеффри Нео
Это рабочее решение для всех типов строк HTML. Спасибо @JeffreyNeo
Akash Bisariya
4

Я использовал некоторые кнопки с некоторыми событиями, преобразованный файл изображения, поступающий с сервера. Загрузка обычных данных у меня не работала, конвертация в Base64 работала нормально.

String unencodedHtml ="<html><body>'%28' is the code for '('</body></html>";
tring encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(), Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");

Узнать подробности о WebView

Ариндам
источник
+1 для кодирования HTML. Вы можете дополнительно передать правильную кодировку getBytes()следующим образом:unencodedHtml.getBytes("UTF-8") и определить кодировку в типе MIME , как это: "text/html; charset=utf-8".
Minding