【问题标题】:Android HttpClient persistent cookiesAndroid HttpClient 持久性 cookie
【发布时间】:2010-11-10 16:54:12
【问题描述】:

更新:不应再向阅读本文的任何人推荐此问题及其答案。 Android no-longer recommends HttpClient (read: deprecated), and instead recommends HttpUrlConnection。现在使用的库的一个很好的例子是RetrofitOkHttp。在这个问题的上下文中,cookie 可以与后续查询一起保存、存储和交付。这不是透明处理的。 OkHttp you can use Interceptors

我有一个具有多个意图的 Android 应用程序。

第一个意图是登录表单,后续意图依赖于登录过程提供的 cookie。

我遇到的问题是 cookie 似乎没有在意图中持续存在。我在每个意图中创建新的 HttpClients(我最初尝试将 Parcelable 传输到每个意图,但效果不佳)。

有没有人有任何关于使 cookie 在意图中持久存在的技巧?

【问题讨论】:

  • 顺便说一句,我发现最接近的是将 cookiestore 写入共享首选项。
  • 为了结束这个讨论,我成功地完成了我的任务,创建了我自己的 HttpClient 类,其中包含设置和获取其 CookieStore 的方法。我这样做是为了在初始化客户端时自动从 SharedPreferences 中检索所有 cookie。此外,在每次创建新 Intent 或完成当前 Intent 之前,所有 cookie 都会复制到 SharedPreferences 中。

标签: java android cookies httpclient


【解决方案1】:

您可以按照@Emmanuel 的建议进行操作,也可以在您正在创建的 HttpClient 之间传递 BasicHttpContext

上下文和 cookie 的使用示例,complete code here

    HttpClient httpclient = new DefaultHttpClient();

    // Create a local instance of cookie store
    CookieStore cookieStore = new BasicCookieStore();

    // Create local HTTP context
    HttpContext localContext = new BasicHttpContext();
    // Bind custom cookie store to the local context
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    HttpGet httpget = new HttpGet("http://www.google.com/", localContext);

【讨论】:

  • 感谢您提供的信息,这似乎是我的最佳选择。
【解决方案2】:

不要创建新的 HttpClients;这将清除 cookie。重用单个 HttpClient。

【讨论】:

  • 所以我可以将 httpclient 设为静态。
  • @vsk:是的。例如,您可以使用 Singleton。我通常会创建一个 ConnectionHelper Singleton,我可以在其中序列化对服务器的请求。
【解决方案3】:

让你的 httpClient 成为一个单例类。

【讨论】:

    【解决方案4】:

    在Application类中定义HttpClient,在activity中使用。

    在应用中

    public class AAA extends Application {
        public HttpClient httpClient; 
    
        httpClient = new DefaultHttpClient(); 
    

    在活动中

    AAA aaa = (AAA)getApplication();
    httpClient = app.httpClient;
    

    【讨论】:

    • 您无法控制应用程序的状态,如果您使用此功能,请确保执行空值检查或 AAA 中的方法以通过此检查获取客户端。
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2013-03-06
    • 2012-08-09
    • 2017-07-25
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多