【Android】 用WebView踩的坑

版权声明:转载请标明本博客地址: https://blog.csdn.net/xiaodouyaer624/article/details/79530099

0号坑:

    情景:本地加载HTML页面,请求到网络数据后,对HTML页面中进行部分数据的填充。

    问题:我是直接加了HTML页面,然后网络请求成功后将数据进行填充,出现了数据填充不上的情况。

    分析:原因是填充数据时HTML页面还没加载完成,导致填充失败。

    办法:如下代码-->

//这样设置是为了防止webview页面未加载完成就调用赋值方法而导致的先赋值后加载页面,
            // 从而导致赋值失败
            webView.setWebViewClient(new WebViewClient() {
                // 重写shouldOverrideUrlLoading方法,使点击链接后不使用其他的浏览器打开。
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    // 如果不需要其他对点击链接事件的处理返回true,否则返回false
                    return true;
                }

                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    // TODO Auto-generated method stub
                    super.onPageStarted(view, url, favicon);
                    //打开时显示加载框
                    showProgressDialog("get");
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    // TODO Auto-generated method stub
                    super.onPageFinished(view, url);
                    //加载完成关闭加载框
                    webView.post(new Runnable() {
                        @Override
                        public void run() {
                            webView.loadUrl("javascript:AndroidToWeb0('" + butcheryName + "')");
                            webView.loadUrl("javascript:AndroidToWeb1('" + qualifiedNum + "')");
                            webView.loadUrl("javascript:AndroidToWeb2('" + sort + "')");
                            webView.loadUrl("javascript:AndroidToWeb3('" + slauPen + "')");
                            webView.loadUrl("javascript:AndroidToWeb4('" + veteSign + "')");
                            webView.loadUrl("javascript:AndroidToWeb5('" + indate + "')");
                        }
                    });
                    hideProgressDialog();
                }
            });

1号坑:

    情景:后台返回业务详情页为HTML字符串,需要显示成HTML页面。

    问题:用 WebView 的  loadData(text,"text/html", "UTF-8")  方法出现乱码。

    分析:已确认后台编码确实为UTF-8,由于 loadData(text, "text/html; charset=UTF-8", null) 这种方式不会出现乱码,感觉是此方法的第三个编码参数不被WebView解析。

    办法:如下代码-->

//      加载HTML字符串进行显示
//      webView.loadDataWithBaseURL(null, bean.RECORD.content, "text/html", "UTF-8", null);//这种方式不会乱码
//      webView.loadData(bean.RECORD.content,"text/html", "UTF-8");//这种方式会乱码
        webView.loadData(bean.RECORD.content, "text/html; charset=UTF-8", null);//这种写法可以正确解码

猜你喜欢

转载自blog.csdn.net/xiaodouyaer624/article/details/79530099