So übergeben Sie HTML-Zeichenfolge an Webview auf Android


140

Hallo, ich analysiere XML und lade es dann in die Webansicht. Nach dem Parsen erstelle ich vier Zeichenfolgen, damit ich alle Zeichenfolgen an eine Ansicht anhängen kann. Ich kann zwei Ansichten in der Webansicht abrufen, aber nicht die ersten beiden Zeichenfolgen.

Bitte schlagen Sie mir mit meinem Code vor, wo ich falsch liege und wie ich die formatierten HTML-Zeichenfolgen in der Webansicht richtig abrufen kann. Bitte schauen Sie sich meinen Code an und helfen Sie mir, dieses Problem zu lösen.

@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;
    }
}

Ich kann KapitelIntro und Kapitelinhalt in der Webansicht abrufen, aber nicht die ersten beiden Zeichenfolgen helfen mir, Freunde.

Antworten:


190

Ich habe erfolgreich durch unter Zeile getan

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

Fügen Sie dies dem <head> in der index.php / index.html hinzu?
Mthe beseti

1
ya wenn du willst, sonst wird es ok sein
Siddhpura Amit

Es aktualisiert die Benutzeroberfläche nach einer kleinen Verzögerung. Wie kann man das Ding reparieren?
Narendra Singh

Kann ich "text / html", "UTF-8" verwenden, wenn ich den HTML-Code mit webView.loadUrl ("javascript: MyFunction (data," text / html "," UTF-8 ") an die Javascript-Funktion übergeben möchte?
user1788736

Nein, ich habe nicht so verwendet
Siddhpura Amit

167

So laden Sie Ihre Daten in WebView. Rufen Sie die loadData () -Methode von WebView auf

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

Sie können dieses Beispiel überprüfen

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


Ich habe es damit versucht, immer noch nicht passiert, auch mit Loadbaserul
Cavallo

soll das mit einer Zeichenfolge funktionieren, die Javascript enthält? Es funktioniert nicht für mich
Edu

27
es sollte seinwebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav

5
Das "text / html; charset = utf-8" macht einen großen Unterschied, Symbolzeichen werden ohne es nicht richtig gerendert.
Mic Fok

29

Null zu übergeben wäre besser. Der vollständige Code lautet wie folgt:

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

Fügen Sie dies dem <head> in der index.php / index.html hinzu?
Mthe beseti

@mthethelelibeseti Dies sind Android-Codes, keine HTML-Codes. Oder habe ich deine Frage falsch verstanden?
Jeffrey Neo

Es ist die funktionierende Lösung für alle Arten von HTML-Zeichenfolgen. Danke @JeffreyNeo
Akash Bisariya

2

Das Laden normaler Daten funktionierte bei mir nicht, die Konvertierung in Base64 funktionierte einwandfrei.

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

Details finden Sie in WebView

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.