繼上一篇WebView攔截器出來Cookie后,在測試過程中又發(fā)現(xiàn)了問題朱嘴。使用攔截器來強塞Cookie在Android5.0之后的版本是沒有問題徐裸,但是之前的版本使用過時的api來強塞Cookie就會發(fā)生線程阻塞女器。過時api如下:
public WebResourceResponse shouldInterceptRequest(WebView view,
String url)
思考問題
開始我一直思路在為什么會發(fā)生阻塞上诀蓉,使用了子線程等方式都無法解決問題,后來和服務(wù)端聊天的過程中知道了他們使用了ajax的DWR框架癣漆,我就開始搜索之路维咸。
Cookie是什么
Cookie是保存了Session和一系列跟用戶信息有關(guān)的東西,它存放與用戶本地惠爽,可以保持用戶的登錄狀態(tài)癌蓖。Cookie中有domain和path,domain表示的是cookie所在的域,path表示cookie所在的目錄婚肆。
原因
之前的取Cookie的代碼只加了domain沒有加path租副。所有服務(wù)端無法取到Cookie了,為此我把上一次代碼進行了修改较性,如下:
private void syncCookie(String url){
try {
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeAllCookie();
List<Cookie> cookies = BaseSupport.getCookieStore().getCookies();
Log.i(TAG, "cookie=" + cookies);
if (cookies != null) {
for (Cookie cookie : cookies) {
// String cookieString = cookie.getName() + "="
// + cookie.getValue() + ";domain=" + cookie.getDomain();
String cookieString = cookie.getName() + "=" + cookie.getValue()
+ ";domain=" + cookie.getDomain() + ";path=/;";
cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
}
} catch (Exception e) {
e.printStackTrace();
}
}
這樣就可以解決問題了用僧,還有一點就是syncCookie要加載load(url)的之前setting之后。
參考:[http://blog.csdn.net/wayne_sulong/article/details/43679255]