尝试使用SharedReferences存储字符串集时出现错误

我正在尝试使用SharedReferencesAPI存储一组字符串

设置<字符串>s=sharedPrefs.getStringSet(“key”,新的HashSet<String>());
s、 添加(新的_元素);
SharedReferences.Editor=SharedRefers.edit();
编辑者.putStringSet(s);
edit.commit()

我第一次执行上面的代码时,s被设置为默认值(刚刚创建的end为空HashSet),并且它的存储没有问题

第二次和下一次执行此代码时,将返回一个添加了第一个元素的s对象。我可以添加元素,在程序执行期间,它显然存储在SharedReferences中,但当程序被终止时,SharedReferences将从其持久性存储中再次读取,新的值将丢失

如何存储第二个元素以及之后的元素,使它们不会丢失

此“问题”记录在SharedReferences.getStringSet

SharedReferences.getStringSet返回存储的HashSet对象的引用
SharedReferences中。向该对象添加元素时,它们实际上添加在共享引用

这没关系,但当你试图存储它时,问题就来了:Android将你试图使用SharedReferences.Editor.putStringSet保存的修改过的哈希集与存储在SharedReference上的当前哈希集进行比较,两者都是相同的对象

一种可能的解决方案是复制集合<字符串&gt由SharedReferences对象返回:

设置<字符串>s=新哈希集<字符串>(sharedPrefs.getStringSet(“key”,新的HashSet<String>());

这使得s成为不同的对象,添加到s的字符串将不会添加到SharedReferences中存储的集合中

其他可行的解决方法是使用相同的SharedReferences.Editor事务来存储另一个更简单的首选项(如整数或布尔值),您只需强制每个事务上存储的值不同(例如,您可以存储字符串集大小)

发表评论