分析一下,解决方案入下:
1)如果你大意还可能忘记上网权限了,或者是没有联网。
2)那么我最后是webView.loadData 改为 webView.loadDataWithBaseURL 方法就可以了。
2.下面分析一下原因:
loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误, 显示找不到网页还有部分html代码。因为css中经常用'#', '%'等字符,所以大部分网页会出现解析错误,需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f 。
webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html", "utf-8");
这样写之后会发现错误没有了,但是显示效果不好,一些背景颜色排版效果都没有了,我们看一下WebView 类下面的源代码就会发现问题:
WebView.class 源码:
public void loadDataWithBaseURL(String baseUrl, String data,
String mimeType, String encoding, String failUrl) {
}
1)推荐使用:loadDataWithBaseURL()方法。完美解析HTML代码。
3.那么对于以上json数据显示的地址可能用我的第一种方法没有显示出来的方法分析一下 。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
return true;
}
});
解析:
webview加入的网络请求的加载框,所以得在加入网络加载框 。
1)解决方案:我的第二种请求的uri中是设置了,webVieClient,当然我不知道是不是没有让他结束掉导致没有显示出网页 。
//设置webview的客户端,
webView.setWebViewClient(new WebViewClient()
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
// super.onPageStarted(view, url, favicon);
netDialog = DialogUtil.showNetProgressDialog(AdvartWebActivity.this);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url)
{
if (null != netDialog)
{
//加载完成,dialog销毁
netDialog.dismiss();
}
super.onPageFinished(view, url);
}
});
2)在此之前加入了webview加载url的四个属性
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setRenderPriority(RenderPriority.HIGH);
webView.getSettings().setBlockNetworkImage(true);
最后,其实我的项目在上面第一条解决方案就已经出现结果,当然写了这么多,也是希望以后大家有个参考,第一次来bus发帖写的不好,希望大家体谅 。
原文链接:http://www.apkbus.com/blog-671730-59431.html