如何在Android上将HTML字符串传递给WebView


141

嗨,我正在解析xml,然后将其加载到Web视图,解析之后,我创建了四个字符串,以便可以将所有字符串附加到一个视图。我能够在Web视图上获得两个视图,但不能获得前两个字符串。

请用我的代码建议我,我在哪里出错了,以及在网络视图上获取格式化的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,但是前两个字符串不能帮助我的朋友。

Answers:


190

我已经成功完成以下行

 //data == html data which you want to load 
 WebView webview = (WebView)this.findViewById(R.id.webview);
 webview.getSettings().setJavaScriptEnabled(true);
 webview.loadDataWithBaseURL("", data, "text/html", "UTF-8", "");

将此添加到index.php / index.html的<head>上吗?
Mthe beseti 2014年

1
ya,如果您愿意的话,否则就可以了
Siddhpura Amit

稍有延迟后,它将更新UI。如何解决那件事?
Narendra Singh

如果我想使用webView.loadUrl(“ javascript:MyFunction(data,” text / html“,” UTF-8“)将html传递给javascript函数,可以使用” text / html“,” UTF-8“吗?
user1788736

不,我没有这样使用过
Siddhpura Amit

168

在WebView中加载数据。调用WebView的loadData()方法

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

您可以检查这个例子

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


我尝试过,但仍然没有发生,也尝试过用loadbaserul
cavallo

那应该与包含javascript的字符串一起工作吗?它对我不起作用
Edu

27
应该是webView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav 2014年

5
“ text / html; charset = utf-8”有很大的不同,没有它,符号字符将无法正确呈现。
Mic Fok 2014年

29

传递null会更好。完整的代码如下:

WebView wv = (WebView)this.findViewById(R.id.myWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL(null, "<html>...</html>", "text/html", "utf-8", null);

将此添加到index.php / index.html的<head>上吗?
Mthe beseti 2014年

@mthethelelibeseti这是Android代码,而不是HTML代码。还是我误解了你的问题?
Jeffrey Neo

它是所有类型的html字符串的有效解决方案。感谢@JeffreyNeo
Akash Bisariya

2

加载普通数据对我来说不起作用,将其转换为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上查找详细信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.