Comment passer une chaîne HTML à Webview sur Android


141

Salut, je suis en train d'analyser xml, puis de le charger dans la vue Web, après l'analyse, je crée quatre chaînes afin de pouvoir ajouter toutes les chaînes à une vue. Je peux obtenir deux vues sur la vue Web mais pas les deux premières chaînes.

Veuillez me suggérer mon code, où je me trompe et quelle est la bonne façon d'obtenir les chaînes html formatées sur la vue Web. Veuillez jeter un œil à mon code et m'aider à résoudre ce problème.

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

Je peux obtenir le chapitreIntro et le contenu du chapitre sur la vue Web, mais pas les deux premières chaînes.

Réponses:


190

j'ai réussi par la ligne ci-dessous

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

ajoutez-vous ceci à <head> sur l'index.php / index.html?
Mthe beseti

1
oui si tu veux, sinon ça ira
Siddhpura Amit

Il met à jour l'interface utilisateur après un petit décalage. Comment réparer ça?
Narendra Singh le

puis-je utiliser "text / html", "UTF-8", si je veux passer la fonction html à javascript en utilisant webView.loadUrl ("javascript: MyFunction (data," text / html "," UTF-8 ")?
user1788736

Non, je n'ai pas utilisé comme ça
Siddhpura Amit

168

Pour charger vos données dans WebView. Appeler la méthode loadData () de WebView

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

Vous pouvez consulter cet exemple

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


J'ai essayé avec ça, mais ça n'arrive toujours pas aussi essayé avec loadbaserul
cavallo

est-ce censé fonctionner avec une chaîne contenant du javascript? Ça ne marche pas pour moi
Edu

27
ça devrait êtrewebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav

5
Le "text / html; charset = utf-8" fait une grande différence, les caractères symboliques ne sont pas rendus correctement sans lui.
Mic Fok

29

Passer null serait mieux. Les codes complets sont comme:

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

ajoutez-vous ceci à <head> sur l'index.php / index.html?
Mthe beseti

@mthethelelibeseti ce sont des codes Android, pas du HTML. Ou j'ai mal compris votre question?
Jeffrey Neo

C'est la solution de travail pour tous les types de chaînes html. Merci @JeffreyNeo
Akash Bisariya

2

Le chargement de données normales ne fonctionnait pas pour moi, la conversion en Base64 fonctionnait très bien.

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

Trouvez des détails sur WebView

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.