【问题标题】:Android shared preferences assignments not persisting between emulator sessionsAndroid 共享首选项分配不会在模拟器会话之间持续存在
【发布时间】:2011-08-11 07:19:00
【问题描述】:

我正在使用以下代码将数据保存到我的 Android 应用程序的共享首选项中:

    private SharedPreferences getOurSharedPreferences() {
        return getSharedPreferences(SHARED_PREFS_FILENAME, MODE_PRIVATE);
    }       

    SharedPreferences sharedPrefs = getOurSharedPreferences();
    SharedPreferences.Editor editor = sharedPrefs.edit();
    editor.putString(keyName, theString);
    if (!editor.commit()) 
        throw new RuntimeException("Unable to save new string.");

    // Get it back as a test.
    String s2 = getStringFromStorage(keyName);

其中 SHARED_PREFS_FILENAME 是私有的最终静态字符串,而 keyName 是我当前用作字段名称的任何键的名称。提交工作正常,我没有遇到异常。如您所见,我添加了一个测试来检索最近提交的字符串,当我检查它时(s2),该值很好。因此,在我的应用程序的生命周期内,共享首选项存储没有任何问题。但是,当我在模拟器中重新启动应用程序时,共享首选项存储区域是空的,并且我找不到我在上次模拟器会话中存储的值。我做了一些阅读,据我所知,存储的值应该在会话中持续存在,显然它们保存在属于模拟器的 XML 文件中。但是我遇到了问题。

谁能告诉我为什么我的共享首选项存储值没有在 Android 模拟器会话之间持续存在?

-- 罗什克莱尔

【问题讨论】:

  • 您是否在堆栈跟踪中看到与您的代码相关的任何错误或警告?
  • 我遇到了同样的问题,但也在我的设备上进行测试,我运行我的应用程序,进行了一些首选项更改,一切正常,然后我停止并重新启动应用程序,更改就消失了!
  • 在我的情况下,我的应用程序运行良好,直到我更改了包名称,然后一切正常,除了 sharedPreferences 持久性。你的情况也是这样吗?在您更改某些内容之前,您的应用是否正常运行,或者以前从未运行过?

标签: android xml emulation commit sharedpreferences


【解决方案1】:

我遇到了类似的问题。尝试卸载应用程序并重新安装。随着您的开发,共享首选项文件中的内容可能会损坏。

重新安装后,我的问题消失了,我可以看到我在应用生命周期中的持久值。

【讨论】:

    【解决方案2】:

    在调试配置对话框窗口的目标选项卡上,是否勾选了“擦除用户数据”?

    【讨论】:

    • 这不会删除应用程序本身吗?
    • 我在问是否打勾,因为如果打勾,它将擦除所有用户数据。显然,他的用户数据被擦除了,因为他的代码看起来很可靠。 :)
    • 所以如果勾选了“擦除用户数据”,那么即使应用程序也会被卸载。
    • 不,这不是我的经验。已安装的应用程序应该仍然存在。
    • 我只是看了一下,没有选中那个框,所以没有。还有什么我可能会不小心清除共享首选项存储的事情吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2017-12-28
    • 2019-08-02
    • 2011-04-27
    相关资源
    最近更新 更多