【问题标题】:Android How to save data array even when app closedAndroid即使应用程序关闭也如何保存数据数组
【发布时间】:2014-07-01 04:15:12
【问题描述】:

我正在开发一个允许用户预定下载的应用程序(用户可以选择多个链接,然后在特定的给定时间(甚至可能需要几周时间),AlarmManager 将发送广播以调用 DownloadService

那么,即使应用程序关闭,我如何保存用户选择的链接?我认为这些链接只需要是一个 ArrayList。

我尝试了 SharedPreferences,但它只允许我 putInt、putBoolean... 我还阅读了关于 onSaveInstanceState / onRestoreInstanceState 但是当应用程序关闭时,saveInstanceState 也消失了,对吧?

我该怎么做?非常感谢

【问题讨论】:

  • SharedPreferences 也可以存储字符串 developer.android.com/reference/android/content/…
  • putExtra(),允许你存储字符串,你知道吗?
  • 我知道 SharedPreference 让我存储字符串,这就是为什么我把“...”放在后面。但是,如果对于用户选择的每个 url,我将其与 SharedPreference 文件中的密钥一起存储,该文件将是一团糟,我不希望这样。抱歉,如果我没有在上面的帖子中明确我的意图。我想知道一种方法(一种好方法)将大量 url(甚至 1000 个)存储到应用程序中,以便在应用程序关闭时,该 url 仍然存在。

标签: android download alarmmanager


【解决方案1】:

如果你有ArrayList<String> urlsList;

保存网址:

Editor edit = prefs.edit();
edit.putInt("list_size", urlsList.size());
for(int i=0;i<urlsList.size(); i++)
    edit.putString("url_" + i, urlsList.get(i));
edit.commit();

检索网址:

int size = prefs.getInt("list_size", 0);
ArrayList<String> retrievedUrls = new ArrayList<String();
for(int i=0; i<size; i++)
    retrievedUrls.add(prefs.getString("url_" + i, null)); 

【讨论】:

  • 这种方法的问题是你会污染你的偏好。假设您保存了一个包含 100 个条目的数组,然后将其缩小为 2。除非您先清理它,否则您的首选项中仍然会有 100 个条目。
  • 是的。但这是可以完成的。在理想情况下,他应该使用 sqlite 数据库。
  • 能否请您澄清一下sqlite数据库解决方案?您上面的解决方案是完成任务,但它绝对让我的 SharedPreference 文件变得一团糟。非常感谢
  • 只需使用 SQLite 数据库来保存和检索 URL。这是一个详尽的教程:androidhive.info/2011/11/android-sqlite-database-tutorial
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 2017-04-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多