我正在尝试使用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上的当前哈希集进行比较,两者都是相同的对象
一种可能的解决方案是复制集合<;字符串>由SharedReferences对象返回:
设置<;字符串>;s=新哈希集<;字符串>;(sharedPrefs.getStringSet(“key”,新的HashSet<;String>;());
这使得s成为不同的对象,添加到s的字符串将不会添加到SharedReferences中存储的集合中
其他可行的解决方法是使用相同的SharedReferences.Editor事务来存储另一个更简单的首选项(如整数或布尔值),您只需强制每个事务上存储的值不同(例如,您可以存储字符串集大小)