【发布时间】:2013-12-23 08:16:11
【问题描述】:
为了便于阅读,我这里的代码将被简化。
获取Set并为其添加密码的方法:
public void addPass(String pass)
{
// Get the current list.
SharedPreferences sp = getSharedPreferences("passes", 0);
SharedPreferences.Editor editor = getSharedPreferences("passes", 0).edit();
Set<String> passes = sp.getStringSet("myStrings", new HashSet<String>());
// Add the new value.
passes.add(pass);
// Save the list.
editor.putStringSet("myStrings", passes);
editor.commit();
}
public Set<String> getPasses()
{
SharedPreferences sp = getSharedPreferences("passes", 0);
return sp.getStringSet("myStrings", new HashSet<String>());
}
从集合中读取
Set<String> x = getPasses();
String[] passes = x.toArray(new String[0]); // convert the set to array
toast(Arrays.toString(passes)); // test what the set looks like
我将集合转换为数组,因为使用数组测试条件对我来说更容易。
添加到集合中
EditText password1 = new EditText(this);
String p1 = password1.getText().toString();
addPass(p1.trim()); // add it to the set
toast("Account successfully created.");
问题
当我第一次运行此代码时,我添加了三个字符串值:"a"、"b"、"c"(按此顺序)。
所有的值都被正确地添加到Set,并且从上面的这行代码中得到了确认:
toast(Arrays.toString(passes)); // test what the set looks like
在将"c" 添加到集合后,它输出了[b, c, a]。
问题是当我关闭应用程序并重新打开它时,Set 只包含"a"。
我可以再次添加"b" 和"c" 值,但循环将继续,Set 仅保留在重新创建活动后添加到它的第一个值。
我已经解决了一段时间,无法修复它。如有必要,我可以提供有关如何以及何时使用此代码的更多详细信息。我希望我不需要,有人可以指出代码中的问题,如图所示。
【问题讨论】:
-
每次添加 "b" 、 "c" 并重启应用都会出现这种情况?
-
但是
addPass(p1.trim());你只添加了一个值? -
@sanjeevmk 是的。
-
@ρяσѕρєяK 该代码实际上在按钮侦听器中。对困惑感到抱歉。我添加了多个值。
-
@mikeyaworski : 问题是你每次在按钮点击
SharedPreferences时都添加新的 HashSet 并使用相同的键myStrings
标签: java android set sharedpreferences