Android 共享首选项分配不会在模拟器会话之间持续存在

Posted

技术标签:

【中文标题】Android 共享首选项分配不会在模拟器会话之间持续存在【英文标题】:Android shared preferences assignments not persisting between emulator sessions 【发布时间】: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 持久性。你的情况也是这样吗?在您更改某些内容之前,您的应用是否正常运行,或者以前从未运行过? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

这不会删除应用程序本身吗? 我在问是否打勾,因为如果打勾,它将擦除所有用户数据。显然,他的用户数据被擦除了,因为他的代码看起来很可靠。 :) 所以如果勾选了“擦除用户数据”,那么即使应用程序也会被卸载。 不,这不是我的经验。已安装的应用程序应该仍然存在。 我只是看了一下,没有选中那个框,所以没有。还有什么我可能会不小心清除共享首选项存储的事情吗?谢谢。

以上是关于Android 共享首选项分配不会在模拟器会话之间持续存在的主要内容,如果未能解决你的问题,请参考以下文章

在 2 个 Android 应用程序之间共享数据

如何在两个不同的 Android 应用程序之间共享 SharedPreferences 文件?

Android开发 - 文件保存状态和首选项

会话在选项卡之间共享

共享首选项可以是私人的吗?

如何使用 Xamarin 在设备之间共享用户首选项