Cara mengoper string html ke tampilan web di android

141

Hai Saya parsing xml dan kemudian memuatnya ke tampilan web, setelah parsing saya membuat empat string sehingga saya bisa menambahkan semua string ke satu tampilan. Saya bisa mendapatkan dua tampilan pada tampilan web tetapi bukan dua string pertama.

Tolong sarankan saya dengan kode saya, di mana saya salah dan apa cara yang benar untuk mendapatkan string html diformat pada tampilan web. Tolong lihat kode saya dan bantu saya memecahkan masalah ini.

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

Saya bisa mendapatkan chapterIntro dan chaptercontent di tampilan web tetapi bukan dua string pertama tolong bantu saya teman.

Cavallo
sumber

Jawaban:

190

Saya telah berhasil melakukan dengan garis di bawah ini

 //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
sumber
apakah Anda menambahkan ini ke <head> pada index.php / index.html?
Mthe beseti
1
ya jika Anda mau, jika tidak maka akan baik-baik saja
Siddhpura Amit
Ini memperbarui UI setelah sedikit lag. Bagaimana cara memperbaikinya?
Narendra Singh
dapatkah saya menggunakan "teks / html", "UTF-8", jika saya ingin meneruskan fungsi html ke javascript menggunakan webView.loadUrl ("javascript: MyFunction (data," teks / html "," UTF-8 ")?
user1788736
Tidak, saya belum pernah menggunakan ini
Siddhpura Amit
168

Untuk memuat data Anda di WebView. Panggil metode loadData () dari WebView

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

Anda dapat memeriksa contoh ini

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

Arslan Anwar
sumber
saya mencoba dengan itu, masih tidak terjadi juga mencoba dengan loadbaserul
cavallo
apakah itu seharusnya bekerja dengan string yang mengandung javascript? Ini tidak bekerja untuk saya
Edu
27
seharusnyawebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav
5
"Text / html; charset = utf-8" membuat perbedaan besar, karakter simbol tidak ditampilkan dengan benar tanpa itu.
Mic Fok
29

Melewati nol akan lebih baik. Kode lengkapnya seperti:

WebView wv = (WebView)this.findViewById(R.id.myWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL(null, "<html>...</html>", "text/html", "utf-8", null);
Jeffrey Neo
sumber
apakah Anda menambahkan ini ke <head> pada index.php / index.html?
Mthe beseti
@mthethelelibeseti ini adalah kode Android, bukan HTML. Atau saya salah mengerti pertanyaan Anda?
Jeffrey Neo
Ini adalah solusi yang berfungsi untuk semua jenis string html. Terima kasih @JeffreyNeo
Akash Bisariya
2

Memuat data normal tidak berfungsi untukku, mengubah ke Base64 berfungsi dengan baik.

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

Temukan detail di WebView

Arindam
sumber