Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:如何储存饼干?_Android_Cookies - Fatal编程技术网

Android 安卓:如何储存饼干?

Android 安卓:如何储存饼干?,android,cookies,Android,Cookies,在我的Android应用程序中,每个活动都充满了来自web上某个地方的xml文件的数据。提供这些文件的网站有一个登录机制,可以使用cookie 我知道如何向登录页面发出HTTP请求并接收cookie。我不知道的是,我如何存储它,以便在其他活动和下次启动应用程序时重复使用。cookie的有效期为一年,因此我的应用程序的用户应该登录一次,然后在一整年内不再登录 我该怎么做?我在谷歌上搜索了很多,但要么我使用了错误的关键词,要么互联网上没有简单的解决方案。我希望这里有人能帮助我 提前致以最良好的问候和

在我的Android应用程序中,每个活动都充满了来自web上某个地方的xml文件的数据。提供这些文件的网站有一个登录机制,可以使用cookie

我知道如何向登录页面发出HTTP请求并接收cookie。我不知道的是,我如何存储它,以便在其他活动和下次启动应用程序时重复使用。cookie的有效期为一年,因此我的应用程序的用户应该登录一次,然后在一整年内不再登录

我该怎么做?我在谷歌上搜索了很多,但要么我使用了错误的关键词,要么互联网上没有简单的解决方案。我希望这里有人能帮助我


提前致以最良好的问候和感谢,简·奥利弗

在您拨打http电话后,您可以像这样抓取饼干

List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
   Log.d(TAG,"no cookies received");
} else {
   for (int i = 0; i < cookies.size(); i++) {
      if(cookies.get(i).getName().contentEquals("PHPSESSID")) {
         PHPSESSID = cookies.get(i).getValue();
      }
   }
}

aList是您所有的nameValuePairs

看起来Android正在使用默认的内存实现,因此您需要创建自己的持久cookie存储

本Java教程概述了如何利用默认实现创建自己的持久存储。

这个示例有两个todo用于存储(读/写),对于存储,我只使用SharedReferences来存储您需要的会话cookie,而不保存其他任何会话cookie

该示例使用了一个关闭钩子,这不是您在Android中想要的。我将使用一个新的公共方法persist()来代替run()和hook,该方法保存您想要的内容,尽管这需要您手动persist()存储

如果您只有一个或两个重要的cookie,您可以将它们保存在add(…)

中,使用存储cookie值。它可以在应用程序启动时保持

小心在KitKat上的内部使用CookieSyncManager

编辑

CookieSyncManager
在API 21中被弃用:

该类在API级别21中被弃用。现在是网络视图 根据需要自动同步Cookie。您不再需要创建 或者使用CookieSyncManager。要手动强制同步,可以使用 CookieManager方法,它是

有一个内置的持久cookie存储,可以与loopj框架一起使用,也可以不与loopj框架一起使用


我编写了一个名为CookieHelper的简单类,并提供了如何使用该类帮助所有面临相同问题的用户的示例:

你看过我的问题了吗?我在问如何在我的应用程序中存储cookies,以备将来在其他活动甚至我的应用程序的其他运行中使用。这就是第一部分所做的,它提取您从网站收到的cookies。在本例中,它正在抓取名为“PHPSESSID”的cookie。然后可以将其存储在字符串中。第二部分展示了如何在以后的某个日期将cookie返回到服务器页面中。如果我想保存服务器发送的所有cookie,该怎么办?不仅仅是我抓到的?你在用AndroidHttpClient吗?您是否已确认未存储该文件?我相信AndroidHttpClient的实现以一种持久的方式为您处理cookie存储。它们的存储方式是使用相同httpclient的后续请求可以识别的。但在关闭应用程序或切换活动并创建httpclient的新实例后,它们不会被保留。感谢我一直在寻找的答案。不幸的是,我解决了这个问题,现在存储登录凭据,并在启动应用程序时登录。然后通过静态类在活动之间共享HttpClient。不过还是要谢谢你!在Android上应避免使用运行时addShutdownHook:从该函数的Android文档中“注意,在Android上,应用程序生命周期不包括VM终止,因此调用此方法不会确保代码运行。相反,您应该使用最合适的生命周期通知(比如Activity.onPause)。”@janoliver您不应该存储登录凭据!?在add()中保存cookie不会考虑对remove()的调用-您不想这样做(至少,如果没有类似的删除操作调用),最初的问题是关于如何持久保存cookie。这意味着,如果你想要全面管理,你需要用你选择的管理解决方案来填充所有功能,而shutdown hook的示例代码对Android来说并不好。在我看来,这应该是正确的答案。。。它就像
CookieSyncManager.getInstance().sync()一样简单
每当您希望使用持久性(而不是RAM)保存cookie时,这不是用于持久化浏览器cookie存储吗?这是否也会在Android应用程序中的HttpClient上保留cookie?您可以非常轻松地将CookieSyncManager与HttpClient一起使用。有关HttpClient cookie处理的示例,请参阅。CookieSyncManager将在多个重新启动中保持。文档显示,这只能用于WebView。此库使我的生活变得更加轻松!接口与java.net.CookieStore不匹配。所以我不能在标准网络库中使用它?
nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
httppost.setEntity(new UrlEncodedFormEntity(aList));