解决WebView通过URL加载H5界面出现空白的问题
1.权限问题:在配置文件中需要设置网络权限
<uses-permission android:name="android.permission.internet" />
2.基本配置问题
websettings websettings = webview.getsettings(); //支持缩放,默认为true。
.setusewideviewport(true); // 缩放至屏幕的大小 websettings
.setloadwithoverviewmode(true); //设置默认编码
websettings .setdefaulttextencodingname("utf-8"); ////设置自动加载图片
websettings .setloadsimagesautomatically(true);
.settings.setjavascriptenabled(true);// 设置可以运行js脚本
.settings.setsupportzoom(false);// 用于设置webview放大
.settings.setbuiltinzoomcontrols(false);
3.出现uncaught typeerror: cannot call method 'getitem' of null异常
这个行出现了异常,这个正是html5的特性,一个本地存储的东西,存储量比cookie大,但是这个必须在android的webview用代码启动才行
解决方法:启动webview的html5的本地存储功能。
webview.getsettings().setdomstorageenabled(true);
webview.getsettings().setappcachemaxsize(1024*1024*8);
string appcachepath = getapplicationcontext().getcachedir().getabsolutepath();
webview.getsettings().setappcachepath(appcachepath);
webview.getsettings().setallowfileaccess(true);
webview.getsettings().setappcacheenabled(true);
4.调用getdeviceid 方法的时候,js没有加载完毕,导致出现空白
解决办法:
webview.setwebviewclient(new webviewclient() { @override public boolean shouldoverrideurlloading(webview view, string url) { view.loadurl(url); return true; } @override public void onpagefinished(webview view, string url) { super.onpagefinished(view, url); //在这里执行你想调用的js函数 if(!flag_get_deviceid){ load(); } } @override public void onreceivederror(webview view, int errorcode, string description, string failingurl) { super.onreceivederror(view, errorcode, description, failingurl); } }); private boolean flag_get_deviceid=false; public void load(){ string key=""; string androidid=""; try{ androidid = secure.getstring(getcontentresolver(),secure.android_id); log.d(tag, "androidid:"+androidid);}catch(exception e){ log.e(tag, ""); }finally{ string script=string.format("javascript:getdeviceid('"+androidid+"')"); webactdetail.evaluatejavascript(script, new valuecallback<string>() { @override public void onreceivevalue(string value) { log.d(tag, "onreceivevalue value=" + value); if(value!=null){ flag_get_deviceid=true; } }}); } }
5.android手机版本问题,现在h5界面实现多样化,导致很多h5界面在低版本的机型上无法展示或者样式错乱
解决办法:一种是重新设计低版本的h5界面,另一种设置项目最低版本
补充知识:webview-使用webview依次访问url列表
有时候,我们需要使用webview依次访问url列表,来刷新网页;
1.1 webview创建
webview = (webview) findviewbyid(r.id.webview);
1.2 webview设置参数
// 设置缓存 webview.getsettings().setcachemode(websettings.load_cache_else_network); // 不设置缓存 // webview.getsettings().setcachemode(websettings.load_no_cache); // 清理缓存 webview.clearcache(true); // 清理历史记录 webview.clearhistory(); // 清理cookies cookiesyncmanager.createinstance(this); cookiesyncmanager.getinstance().startsync(); cookiemanager.getinstance().removesessioncookie(); // 设置可以支持缩放 webview.getsettings().setsupportzoom(true); // 设置出现缩放工具 webview.getsettings().setbuiltinzoomcontrols(true); webview.getsettings().setjavascriptenabled(true);
1.3 获取url列表
int index = 0; string [] strlist = new string[]{"https://www.jb51.net", "https://www.jd.com","https://www.csdn.net",https://www.baidu.com};
1.4 webview设置webviewclient
// 直接创建webviewclient webview.setwebviewclient(new webviewclient() { @override public void onpagefinished(webview view, string url) { super.onpagefinished(view, url); index++; if(index>artstr.length){ }else { webview.clearcache(true); webview.clearview(); log.i("===onpagefinished====", index + "======="); refreshwebpage(index); } } });
1.5 webview加载url
public void refreshwebpage(int index) { string csdnstr = urlstr + artstr[index]; // 直接调用url webview.loadurl(csdnstr); }
以上这篇解决webview通过url加载h5界面出现空白的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇: 爆笑生活雷事多。