2014-06-16 40 views
0

所以我一直試圖讓WebView正常工作來驗證應用程序中使用的用戶會話。它適用於所有4.0+設備,但是當我嘗試使用在2.3.6和2.3.7的設備相同的過程,它拋出該異常的日誌中:WebView無法在Android 2.3.x上保存Cookie

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

這是我用來檢查和保存由後續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,以及測試它的存在。

+0

感謝您的建議。這並沒有真正解決問題,因爲我需要的Cookie從來沒有放在CookieManager中;它似乎得到了我上面提到的RunTimeException,它被保存到CookieManager之前。所以CookieManager將只有我需要的3個餅乾中的2個。 – wchristiansen

+0

@Floofer - 嘗試在調試器中停止以查看可能導致異常的原因。也許你的cookie中有一個奇怪的字符,比如'='或者破壞了解析的東西。也許cookie有非法日期。只是猜測... – Gravitoid