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.

Cavallo
la source

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

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

Arindam
la source