在onResume()Android应用中恢复cookie?

时间:2014-08-14 16:51:22

标签: android cookies

我试图在我的Android应用中维护用户会话。我的登录工作方式如下:我向API发出请求并发送用户电子邮件和密码,如果用户确实存在,那么我将获得一个JSONObject并使用GSON进行管理。这很好用。我还将Cookie 纳入 CoookieStore 并将其保存到 SharedPreferences

事情是,每次应用程序暂停时,我显然都丢失了Cookie,我无法向API提出任何其他请求,因为当然,我没有获得授权。

有什么办法可以在onResume()方法中从SharedPreferences恢复Cookie吗?

我试过了,就像这样:

InteractionManager 是我管理与发出请求和从API获取响应有关的所有内容的类

所以在我的活动中我这样做了:

@Override
protected void onResume() {
    Log.d(TAG, "onResume");
    super.onResume();

    //Create a new instance of cookieStore to set it 
    //into the InteractionManager CookieStore when 
    //the app gets resumed.

    CookieStore cookieStore = new BasicCookieStore();

    String name = "user_credentials";
    String value = prefs.getString(name, "");

    Cookie cookie = new BasicClientCookie(name, value);
    cookieStore.addCookie(cookie);

    name = "user_class";
    value = prefs.getString(name, "");
    Log.d(TAG, "user_class cookie: " + value);
    cookie = new BasicClientCookie(name, value);

    interactionManager.setCookieStore(cookieStore);
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    interactionManager.setLocalContext(localContext);

}

但显然我做得不对,因为API一直说我没有被授权,这可能是因为我做错了管理cookie。

我做错了什么?

希望有人可以提前帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

或者你可以使用android-async-http这是一个非常强大的灵活的http客户端用于android。

根据其文档,您可以轻松地在Android应用程序中使用cookie:

首先,创建一个AsyncHttpClient实例:

AsyncHttpClient myClient = new AsyncHttpClient();

现在将此客户端的cookie存储设置为PersistentCookieStore的新实例,使用活动或应用程序上下文构建(通常这样就足够了):

PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);

从服务器收到的任何cookie现在都将存储在持久性cookie存储区中。

要将自己的cookie添加到商店,只需构建一个新的cookie并调用addCookie:

BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
祝你好运。