WebView白屏问题和cookie问题
2018-01-25 本文已影响0人
HopCoder
以下解决办法均来自于下面两个博客:http://blog.csdn.net/juhua2012/article/details/52249720
http://blog.csdn.net/qq_34584049/article/details/78280815
cookie实际是这样的一个字符串
// sessionid=shasakaakakasja;username=zhangsan
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
cookieManager.setCookie(url, LibConfig.cookie);// cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync();
通过抓取得到的cookie值却只有一个
sessionid=shasakaakakasja
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
String cookie = LibConfig.cookie;
String[] split = cookie.split(";");
if (split != null && split.length > 0){
for (int index = 0; index < split.length; index++){
String cookieStr = split[index].substring(0, split[index].length());
cookieManager.setCookie(url, cookieStr);
}
}
//cookieManager.setCookie(url, LibConfig.cookie);// cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync();
得到的cookie值
sessionid=shasakaakakasja
username=zhangsan
问题介绍:在Android开发中,经常会遇到开发原生和H5嵌套的APP,而在android中加载H5界面时通常使用webview控件进行嵌套,而此时就会出现一些很神奇的事情——界面白屏。
解决办法
1.Android中加载网页时界面会有缓存,通过清除webview的缓存,让app每次进入该H5界面时都重新加载:
// 清缓存和记录,缓存引起的白屏
mWebView.clearCache(true);
mWebView.clearHistory();
mWebView.requestFocus();
WebSettings webSettings = mWebView.getSettings();
webSettings.setDatabaseEnabled(true);
// 缓存白屏
String appCachePath = getApplicationContext().getCacheDir()
.getAbsolutePath() + "/webcache";
// 设置 Application Caches 缓存目录
webSettings.setAppCachePath(appCachePath);
webSettings.setDatabasePath(appCachePath);
2.可以通过setAppCacheEnabled方法来控制webview是否有缓存:
// 应用可以有缓存 true false 没有缓存
webSettings.setAppCacheEnabled(false);
- webview加载H5界面时,H5中的一些控件标签可能使用后android中不支持,可以使用setDomStorageEnabled方法来处理:
// 解决对某些标签的不支持出现白屏
webSettings.setDomStorageEnabled(true);
- setWebViewClient加入这样一段代码 防止在不同android版本上出现白屏的情况:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不另跳浏览器
// 在2.3上面不加这句话,可以加载出页面,在4.0上面必须要加入,不然出现白屏
if (url.startsWith("http://") || url.startsWith("https://")) {
view.loadUrl(url);
mWebView.stopLoading();
return true;
}
return false;
}
我就是按照上面两个方法解决的问题,两个问题一起遇到了,郁闷了一天。