วิธีการส่งสตริง html ไปยัง webview บน Android


141

สวัสดีฉันกำลังแยกวิเคราะห์ xml แล้วโหลดลงในมุมมองเว็บหลังจากการแยกวิเคราะห์ฉันสร้างสี่สายเพื่อที่จะสามารถต่อท้ายสตริงทั้งหมดไปยังมุมมองเดียว ฉันสามารถรับสองมุมมองบนมุมมองเว็บ แต่ไม่ใช่สองสายแรก

โปรดแนะนำฉันด้วยรหัสของฉันฉันจะไปไหนผิดและวิธีที่ถูกต้องในการรับสตริง html ที่จัดรูปแบบในมุมมองเว็บคืออะไร กรุณาดูที่รหัสของฉันและช่วยฉันแก้ปัญหานี้

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

ฉันสามารถรับบทอินโทรและตอนที่เนื้อหาบนเว็บ แต่ไม่ใช่สองสายแรกกรุณาช่วยเพื่อนฉัน

คำตอบ:


190

ฉันได้ทำตามบรรทัดด้านล่างเรียบร้อยแล้ว

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

คุณเพิ่มสิ่งนี้ไปยัง <head> ใน index.php / index.html หรือไม่
MOR beseti

1
ใช่ถ้าคุณต้องการมิฉะนั้นมันจะไม่เป็นไร
Siddhpura Amit

มันอัปเดต UI หลังจากล่าช้าเล็กน้อย จะแก้ไขสิ่งนั้นได้อย่างไร
Narendra Singh

ฉันสามารถใช้ "text / html", "UTF-8" ได้หรือไม่ถ้าฉันต้องการส่งฟังก์ชั่น html ไปยังจาวาสคริปต์โดยใช้ webView.loadUrl ("javascript: MyFunction (data," text / html "," UTF-8 ")?
user1788736

ไม่ฉันไม่ได้ใช้สิ่งนี้
Siddhpura Amit

168

ในการโหลดข้อมูลของคุณใน WebView เรียก loadData () วิธีการของ WebView

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

คุณสามารถตรวจสอบตัวอย่างนี้

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


ฉันลองกับที่ยังไม่เกิดขึ้นลองกับ loadbaserul
cavallo

ที่ควรจะทำงานกับสตริงที่มีจาวาสคริปต์หรือไม่ มันไม่ทำงานสำหรับฉัน
Edu

27
มันควรจะเป็นwebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav

5
"text / html; charset = utf-8" สร้างความแตกต่างอย่างมากอักขระสัญลักษณ์ไม่สามารถแสดงผลได้อย่างถูกต้องหากไม่มี
Mic Fok

29

ผ่านโมฆะจะดีกว่า รหัสเต็มเป็นเหมือน:

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

คุณเพิ่มสิ่งนี้ไปยัง <head> ใน index.php / index.html หรือไม่
MOR beseti

@mthethelelibeseti นี่เป็นรหัส Android ไม่ใช่ของ HTML หรือฉันเข้าใจผิดคำถามของคุณ?
Jeffrey Neo

มันเป็นวิธีการทำงานสำหรับสตริง html ทุกประเภท ขอบคุณ @JeffreyNeo
Akash Bisariya

2

การโหลดข้อมูลปกติไม่ได้ผลสำหรับฉันแปลงเป็น Base64 ใช้ได้ดี

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.