Android'de WebView için HTML dize nasıl geçirilir


141

Merhaba ben xml ayrıştırma ve sonra web görünümüne yükleme, ayrıştırdıktan sonra ben bir görünüm için tüm dize ekleyebilirsiniz böylece dört dizeleri oluşturuyorum. Ben ilk iki dize değil, web görünümünde iki görünüm elde edebiliyoruz.

Pls benim kod ile önermek, nerede yanlış gidiyor ve web görünümünde biçimlendirilmiş html dizeleri almak için doğru yolu nedir. Pls koduma bir göz atın ve bu sorunu çözmeme yardımcı olun.

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

Web görünümünde chapterIntro ve chaptercontent alabilirim ama ilk iki dize değil pls bana arkadaşlar yardımcı olur.

Yanıtlar:


190

başarıyla aşağıdaki satırda yaptım

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

bunu index.php / index.html dosyasındaki <head> öğesine ekler misiniz?
Mthe beseti

1
ya istiyorsanız, aksi takdirde sorun olmayacak
Siddhpura Amit

Biraz gecikmeden sonra kullanıcı arayüzünü günceller. Bu şey nasıl düzeltilir?
Narendra Singh

html'yi webView.loadUrl ("javascript: MyFunction (veri," metin / html "," UTF-8 ") kullanarak javascript işlevine iletmek isterseniz" text / html "," UTF-8 "kullanabilir miyim?
user1788736

Hayır böyle kullanmadım
Siddhpura Amit

168

Verilerinizi WebView'a yüklemek için. WebView'ın loadData () yöntemini çağırın

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

Bu örneği kontrol edebilirsiniz

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


Ben denedim, hala oluyor da loadbaserul ile çalıştı
cavallo

Javascript içeren bir dize ile çalışmak gerekiyordu? Benim için çalışmıyor
Edu

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

5
"Text / html; charset = utf-8" büyük bir fark yaratıyor, sembol karakterleri onsuz düzgün oluşturulmuyor.
Mic Fok

29

Null değerini geçmek daha iyi olur. Kodların tamamı şöyle:

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

bunu index.php / index.html dosyasındaki <head> öğesine ekler misiniz?
Mthe beseti

@mthethelelibeseti Bu HTML değil Android kodları. Yoksa sorunuzu yanlış mı anladım?
Jeffrey Neo

Her tür html dizesi için çalışma çözümüdür. Teşekkürler @JeffreyNeo
Akash Bisariya

2

Normal verilerin yüklenmesi benim için işe yaramıyordu, Base64'e iyi çalışıyor.

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 ile ilgili ayrıntıları bulma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.