今天遇坑啦授霸,在使用webView的過程中出現(xiàn)了Cookie讀不到,我依然用著以前同一套WebViewActivity的代碼坊夫,但是加載過程中就是一直提示"調(diào)用失敗"搬葬。服務(wù)端鐵定說是我們客戶端的問題,可是我們一直用的同一套代碼啊绍移,為啥這次會(huì)出問題呢悄窃?
了解問題
首先我們查詢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();
}
以上代碼我各個(gè)地方加了一遍依然無果登夫。
猜想解決問題的方法
webView的Client也就兩個(gè)广匙,分別是WebViewClient和WebChromeClient。首先查看了WebChromeClient的所有方法恼策,也就onProgressChanged算有點(diǎn)用處鸦致,處理了一下進(jìn)度條的事情。接著查看了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,所有的事情就完成了碳褒。