今天遇坑啦,在使用webView的过程中出现了Cookie读不到,我依然用着以前同一套WebViewActivity的代码,但是加载过程中就是一直提示"调用失败"。服务端铁定说是我们客户端的问题,可是我们一直用的同一套代码啊,为啥这次会出问题呢?
了解问题
首先我们查询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)
发现拦截器拦截了所有的请求,这样我可以对所有的请求都加Cookie,问题应该可以解决。
解决问题
说干就干
@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,所有的事情就完成了。