如何在android WebView客户端中设置cookie
作者:互联网
我想通过WebView调用一个特定的URL.该页面只能在用户登录后调用.我使用AsyncHttpClient库执行登录调用.成功登录后,通过WebView加载URL似乎无法识别正确的标头esp cookie.我怀疑是在HttpClient和WebView的HttpClient之间cookie没有正确同步.知道为什么吗? .这是我如何使用WebView
final WebView webView = (WebView) content.findViewById(R.id.web_travel_advisory);
String url = "http://mydomainurl.com/get_data_after_login";
webView.setWebViewClient(new WebViewClient());
CookieSyncManager.createInstance(getActivity());
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
感谢你的帮助.
解决方法:
哦,几个小时后,我终于弄清楚它是否有效.首先,根据doc,自api 21以来,CookieSyncManager在Android的更新版本上被弃用.因此决定不再使用它了.其次,CookieManager用于存储WebView的cookie.
最终代码
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
List<Cookie> cookies = WSHelper.cookieStore.getCookies();
cookieManager.removeAllCookie();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().contains("session")){
String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain();
cookieManager.setCookie(cookie.getDomain(), cookieString);
Log.d("CookieUrl",cookieString + " ");
}
}
}
webView.loadUrl(url);
解决方案的关键变化是:使用cookie.getDomain()而不是显式域.
cookieManager.setCookie(cookie.getDomain(), cookieString);
标签:android,cookies,webview,asynchttpclient 来源: https://codeday.me/bug/20190930/1834718.html