【发布时间】:2013-11-25 18:47:16
【问题描述】:
我在共享首选项中保存了一个字符串集,如果我读出它就可以了。我开始其他活动,回去再读一遍,就可以了。如果我关闭应用程序并重新启动它,我会得到集合,但只有 1 项而不是 4 项。它一直都在发生。有已知问题吗?我会做错什么?
在一个类中,在应用程序的 oncreate 方法中创建的内容有一个 SharedPreferences 和一个 SharePreferences.Editor 变量。我在保存和加载方法中使用它们。
public void saveFeedback(FeedbackItem feedbackItem) {
checkSp();
Set<String> feedbackSet = getFeedbacksSet();
if(feedbackSet == null){
feedbackSet = new HashSet<String>();
}
JSONObject json = createJSONObjectfromFeedback(feedbackItem);
feedbackSet.add(json.toString());
ed.putStringSet(CoreSetup.KEY_FEEDBACK, feedbackSet);
ed.commit();
}
public Set<String> getFeedbacksSet(){
checkSp();
Set<String> ret = sp.getStringSet(CoreSetup.KEY_FEEDBACK, null);
return ret;
}
private void checkSp(){
if(this.sp == null)
this.sp = applicationContext.getSharedPreferences(applicationContext.getPackageName(), Context.MODE_PRIVATE);
if(this.ed == null)
this.ed = this.sp.edit();
}
我只是不明白这是怎么发生的,在应用程序运行时完美地存储所有项目,然后在重新启动后并非所有项目都在集合中。而且我认为,如果所有项目都被移除,那么它可能比一些项目消失更容易接受,而一个项目仍然存在。有解释吗?
【问题讨论】:
-
值在哪里存储?
-
我在代码中没有看到任何地方向 feedbackSet 添加了多个项目。因此,根据您的代码,返回的集合仅包含单个集合。
-
@MadhurAhuja 请再次阅读代码。在 saveFeedback 方法中,我添加了一个要设置的反馈项。在我的测试中,我写了 4 个反馈(写 1 个反馈,添加到集合... x4)所以如果您调用 saveFeedback 方法 4 次,它会在集合中添加 4 个反馈项...
-
@Gunaseelan 在 SharedPreferences 中...关键是 CoreSetup.KEY_FEEDBACK,类型是 StringSet。或者你的问题是什么?
-
那是错误的。它不会将 4 个反馈项添加到集合中。您需要先添加 4 个项目,然后再提交。否则,您最后的反馈将被最新的书面反馈覆盖。您需要将提交移出该函数并在将 4 个反馈添加到集合后单独调用它。