如何在 SharedPreferences 中存储堆栈
How to store a stack in SharedPreferences
我一直在尝试通过 SharedPreferences
中的 putStringSet
API 将堆栈作为一个集合存储在 SharedPreferences 中。
在写入方法中,我这样做:
putStringSet(KEY, new LinkedHashSet(stack));
当我阅读时,我会这样做:
getStringSet(KEY, null)
变成了Set
。
我通过使用 Collections.reverse(list)
转换为列表来反转集合中的元素,并将所有元素放入堆栈。
当我写入 SharedPreferences
时,一切都很好,但是当我读取时,元素的顺序完全乱了。
有什么想法吗?
SharedPreferences
可能不是最佳解决方案。使用平面文件或数据库会更好地为您服务。话虽如此,您可以通过单独存储值并以编程方式为每个元素生成一个键来实现这一点。
您可以将您的堆栈元素转换为逗号分隔的字符串,然后使用 putString 来保存它。
例如,如果您的堆栈包含以下内容:
| "4" |
| "3" |
| "2" |
| "1" |
| "0" |
-------
您应该将其转换为字符串“0,1,2,3,4”并将其保存到SharedPreferences
。
要重建堆栈,请从 SharedPreferences
中获取字符串,用逗号分隔符将其拆分并按顺序将其压入堆栈。
我一直在尝试通过 SharedPreferences
中的 putStringSet
API 将堆栈作为一个集合存储在 SharedPreferences 中。
在写入方法中,我这样做:
putStringSet(KEY, new LinkedHashSet(stack));
当我阅读时,我会这样做:
getStringSet(KEY, null)
变成了Set
。
我通过使用 Collections.reverse(list)
转换为列表来反转集合中的元素,并将所有元素放入堆栈。
当我写入 SharedPreferences
时,一切都很好,但是当我读取时,元素的顺序完全乱了。
有什么想法吗?
SharedPreferences
可能不是最佳解决方案。使用平面文件或数据库会更好地为您服务。话虽如此,您可以通过单独存储值并以编程方式为每个元素生成一个键来实现这一点。
您可以将您的堆栈元素转换为逗号分隔的字符串,然后使用 putString 来保存它。
例如,如果您的堆栈包含以下内容:
| "4" |
| "3" |
| "2" |
| "1" |
| "0" |
-------
您应该将其转换为字符串“0,1,2,3,4”并将其保存到SharedPreferences
。
要重建堆栈,请从 SharedPreferences
中获取字符串,用逗号分隔符将其拆分并按顺序将其压入堆栈。