所以我一直试图让WebView
正常工作来验证应用中使用的用户会话。它适用于所有4.0+设备但是当我尝试在2.3.6和2.3.7设备上使用相同的进程时,它会在日志中抛出此异常:
com.myapp.WebActivity E/webkit﹕ parse cookie failed for: request_uri=xxxxxxxx; path=/; expires=Mon, 16-Jun-2014 00:00:00; domain=;
它不会使应用程序崩溃,但不会保存正确验证用户会话所需的这一个cookie。我已经查看了Android源代码,看来在尝试保存此特定Cookie时,正在发生RunTimeException
。 Here is the Android Source抛出并捕获异常的地方。我不能100%确定下一步要去哪里,因为cookie在4.0+上正确保存,这似乎是一个AOSP错误。此外,在WebView加载后,CookieManager
没有cookie,它会抛出异常,但还有其他。
所以我真正的问题是:无论如何都要手动获取从WebView页面加载返回的cookie,还是可以通过Android 2.3 WebView以某种方式自动保存cookie?
提前致谢。
答案 0 :(得分:0)
以下是我用来检查和保存后续WebView获取的cookie的方法。它肯定适用于Android 2.2,以及Android 4.X。
检查:
// see if the cookie is already set up
boolean cookieAlreadySetUp = false;
String cookie = cookieManager.getCookie(urlHost);
if ( cookie != null && cookie.length() > 0 ) {
String[] cookies = cookie.split(";");
for ( int i = 0; i < cookies.length; i++ ) {
String oneCookie = cookies[i];
if ( oneCookie.trim().equals(SharedData.COOKIE_STRING) ) {
cookieAlreadySetUp = true;
break;
}
}
}
保存:
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(urlHost, myCookieString);
CookieSyncManager.getInstance().sync();
// give time for the cookie to become known since the save process is asynchronous to this thread
SystemClock.sleep(100);
请注意cookie管理器的异步性质,包括添加或删除cookie,以及测试其存在。