WebView拦截器处理Cookie问题

今天遇坑啦,在使用webView的过程中出现了Cookie读不到,我依然用着以前同一套WebViewActivity的代码,但是加载过程中就是一直提示"调用失败"。服务端铁定说是我们客户端的问题,可是我们一直用的同一套代码啊,为啥这次会出问题呢?

了解问题

首先我们查询Android中Cookie的处理方式,如下:

CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();

        List 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,所有的事情就完成了。

你可能感兴趣的:(WebView拦截器处理Cookie问题)