android配网web打不开,解决WebView通过URL加载H5界面出现空白的问题
1.权限问题:在配置文件中需要设置网络权限2.基本配置问题websettings websettings = webview.getsettings(); //支持缩放,默认为true。.setusewideviewport(true); // 缩放至屏幕的大小 websettings.setloadwithoverviewmode(true); //设置默认编码websettings .setd
1.权限问题:在配置文件中需要设置网络权限
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() {
@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界面出现空白的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。
更多推荐
所有评论(0)