今天遇坑啦,在使用webView的過程中出現(xiàn)了Cookie讀不到,我依然用著以前同一套WebViewActivity的代碼,但是加載過程中就是一直提示"調(diào)用失敗"。服務(wù)端鐵定說是我們客戶端的問題,可是我們一直用的同一套代碼啊,為啥這次會出問題呢?
了解問題
首先我們查詢Android中Cookie的處理方式,如下:
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
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();
cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
}
以上代碼我各個地方加了一遍依然無果。
猜想解決問題的方法
webView的Client也就兩個,分別是WebViewClient和WebChromeClient。首先查看了WebChromeClient的所有方法,也就onProgressChanged算有點用處,處理了一下進度條的事情。接著查看了WebViewClient的所有方法,如下:
//請求完成
public void onPageFinished(WebView view, String url)
//攔截器
public WebResourceResponse shouldInterceptRequest(WebView view,
WebResourceRequest request)
發(fā)現(xiàn)攔截器攔截了所有的請求,這樣我可以對所有的請求都加Cookie,問題應(yīng)該可以解決。
解決問題
說干就干
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
WebResourceRequest request) {
// TODO Auto-generated method stub
syncCookie(request.getUrl().toString());
return super.shouldInterceptRequest(view, request);
}
我封裝前面去Cookie的邏輯,取出request里面的url,所有的事情就完成了。