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 共享首选项分配不会在模拟器会话之间持续存在的主要内容,如果未能解决你的问题,请参考以下文章