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.

Cavallo
quelle

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", "");
Siddhpura Amit
quelle
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

Arslan Anwar
quelle
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);
Jeffrey Neo
quelle
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

Arindam
quelle