【问题标题】:SharedPreferences values do not persist?SharedPreferences 值不持久?
【发布时间】:2014-07-09 10:11:39
【问题描述】:

我有一个方法如下:

public static void addHighligtedDate(String date){
        prefs = context.getSharedPreferences(Fields.SHARED_PREFS_FILE, 0);
        Set<String> highlightedDates = prefs.getStringSet(Fields.HIGHLIGHTED_DATES, new HashSet<String>());
        highlightedDates.add(date);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putStringSet(Fields.HIGHLIGHTED_DATES, highlightedDates);
        editor.commit();
    }  

现在的场景是这样的:
当我打开应用程序添加要突出显示的日期时,它们会突出显示,因为 SharedPreferences 包含这些值。当我按下主页按钮退出应用程序并返回时,值仍然存在。

但是,当应用从最近删除中删除时,这些值就会消失。这是正常行为还是我做错了什么?

查看文档:

这些数据将在用户会话中持续存在(即使您的应用 被杀)。

【问题讨论】:

  • 在这种情况下,这些值将保持不变。代码还有其他问题。
  • 共享首选项值仅在应用程序卸载时删除,所以问题只在他的代码中,所以检查一下,伙计

标签: android sharedpreferences


【解决方案1】:

SharedPreferences 总是随着应用卸载而被删除。

当您卸载任何应用程序时,该应用程序在您的内存中所做的所有更改都会被撤销,这意味着您的 SharedPreference 文件、其他数据文件、数据库文件、应用程序会被 Android 操作系统自动删除.

检查 - how-to-remove-shared-preference-while-application-uninstall-in-android

更新:

但是,当应用程序被终止或关闭时,SharedPreferences 中的值仍然存在。你的代码有问题。

将方法改为-

public static void addHighligtedDate(String date){
        prefs = context.getSharedPreferences(Fields.SHARED_PREFS_FILE, 0);
        Set<String> highlightedDates = prefs.
        getStringSet(Fields.HIGHLIGHTED_DATES, new HashSet<String>());
        highlightedDates.add(date);
        SharedPreferences.Editor editor = prefs.edit();
        editor.clear();
        editor.putStringSet(Fields.HIGHLIGHTED_DATES, highlightedDates);
        editor.commit();
    }  

更新:

公共抽象集合getStringSet(字符串键,集合 defValues)

从首选项中检索一组字符串值。

请注意,您不得修改此调用返回的集合实例。 如果您这样做,则无法保证存储数据的一致性,也不能保证 您完全可以修改实例。

参数

key要检索的首选项的名称。

defValues 如果此首选项不存在,则返回值。

另请参阅 - sharedpreferences-does-not-save-on-force-close

【讨论】:

  • 这不是应用卸载。这是从最近删除的。长按主页按钮并从列表中滑动应用程序。 :)
  • 这将从首选项中删除所有其他值
  • 太伤心了!我还有哪些其他选项可以轻松存储键值对?
  • 您应该在一些实用程序类中创建get preferencessave preferencesremove preferences 的通用方法。就像那样,您只需要调用它们而不是在不同的类中一次又一次地使用它们。对于 get 和 set,参数将是 key/value,对于 remove,参数将只是 key。
猜你喜欢
  • 2012-03-01
  • 2020-01-18
  • 2019-04-21
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多