Android如何从响应DefaultHttpClient中保存cookie?

时间:2012-01-10 19:23:19

标签: android cookies

尝试保存cookie的值以将设备存储在商店中,但不是每次我再次启动应用程序都会返回null值,我不知道为什么我们不存储cookie的值。

final HttpUriRequest request = new HttpGet(uri);                
request.setHeader("User-Agent", Sonora.USER_AGENT);

try {                       
    DefaultHttpClient client = new DefaultHttpClient();                         
    if(cookieValue != null) {   
        Log.d(TAG,"COOKIE RECEBIDO E ARMAZENADO");

        request.setHeader("Cookie", cookieName + "=" + cookieValue);

    }
    HttpResponse resp = client.execute(request);

    // Check if server response is valid
    StatusLine status = resp.getStatusLine();
    if (status.getStatusCode() != Sonora.HTTP_STATUS_OK) {
        Log.e(TAG, "HTTP error, invalid server status code: " + resp.getStatusLine());
        return;
    }

    final List<Cookie> cookies = client.getCookieStore().getCookies();
    int count = cookies.size();
    for( int i = 0; i < count; i++ ) {
        final Cookie c = cookies.get(i);
        if ( c.getName().compareTo( cookieName ) == 0 ) {
            cookieValue = c.getValue();
            break;
        }
    }

} catch (IOException e) {
    Log.e(TAG, "IOError error", e);
}

2 个答案:

答案 0 :(得分:3)

Android CookieStore类不是持久性的 - 因此您的Cookie不会保存在任何地方,并且会在您的应用停止时丢失。

您可以使用Android异步Http客户端(http://loopj.com/android-async-http/),该客户端在您的应用的SharedPreferences中支持可选的持久性Cookie存储。或者您可以按照How to make persistent Cookies with a DefaultHttpClient in Android?实现自己的持久性cookie类。

答案 1 :(得分:0)

如果您希望在重新启动应用程序后保存cookie,则需要将其写入文件或使用SharedPreferences之类的东西来存储它。您可以查看此链接以使用SharedPreferences(这更容易): http://developer.android.com/reference/android/content/SharedPreferences.html