Android StringSets赢得';t保存/加载到SharedReferences或从SharedReferences加载

Android StringSets赢得';t保存/加载到SharedReferences或从SharedReferences加载,android,listview,arraylist,sharedpreferences,jodatime,Android,Listview,Arraylist,Sharedpreferences,Jodatime,我的应用程序存储一个自定义食物对象的数组列表,这些对象被发布到主活动的列表视图中。应用程序的ListView部分工作得很好,但我在将这些食物对象保存和加载到SharedReferences以及从SharedReferences加载食物对象时遇到了问题 我将这些食物对象保存到SharedReferences,方法是将其每个属性保存为字符串,将它们放入StringSet,然后通过putStringSet函数保存每个属性。当应用程序恢复运行时,它将读取SharedReferences中的每个Strin

我的应用程序存储一个自定义食物对象的数组列表,这些对象被发布到主活动的列表视图中。应用程序的ListView部分工作得很好,但我在将这些食物对象保存和加载到SharedReferences以及从SharedReferences加载食物对象时遇到了问题

我将这些食物对象保存到SharedReferences,方法是将其每个属性保存为字符串,将它们放入StringSet,然后通过putStringSet函数保存每个属性。当应用程序恢复运行时,它将读取SharedReferences中的每个StringSet,并使用read属性创建一个新的食物项,然后将每个食物项添加到ArrayList中。代码看起来应该可以工作,但只是没有在会话之间加载数据。有人能帮我找出原因吗?谢谢大家!

Code removed

您似乎从未实例化foodNamesSet变量。因此,检查(foodNamesSet!=null)是否总是返回false。同样的事情也适用于其他的集合。此外,我认为应该在onPause()中执行逻辑,而不是在onStop()中执行逻辑。

其中从不实例化foodNamesSet变量。因此,检查(foodNamesSet!=null)是否总是返回false。这同样适用于其他集合。此外,我认为你应该在onpause而不是onStop()中进行逻辑运算。@NazarMerza就是这样,谢谢!我必须将该集实例化为HashSet,如果没有找到任何内容,则必须更改SharedPrefs访问行以创建新的HashSet。将此作为回复发布,我将批准其作为回复。