我创造了一个简单的游戏。最后,用户的名字和分数应该进入高分榜。为此,我想将这些数据存储在共享偏好中。我看到一个帖子,我试图将它应用到我的应用程序,但它强行关闭。我甚至都不知道这是不是我正在做的事情。所以我把这些密钥对(玩家,得分)放入了一个arraylist。从那里我可以将值输出到列表视图中。 这只是一个例子。
SharedPreferences.Editor scoreEditor = myScores.edit();
scoreEditor.putString("PLAYER", "Thomas");
scoreEditor.putString("SCORE", "5");
scoreEditor.commit();
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>();
Map<String, ?> items = myScores.getAll();
for(String s : items.keySet()){
HashMap<String,String> hmap = new HashMap<String,String>();
hmap.put("PLAYER", s);
hmap.put("SCORE", items.get(s).toString());
LIST.add(hmap);
}
Toast.makeText(Start.this, "LIST size: "+LIST.size(), Toast.LENGTH_LONG).show();
对我来说,如果我存储这样的数据也可以:
scoreEditor.putString("DATA", "Thomas" + "-" + "5");
并将其放入ArrayList<String> LIST = new ArrayList<String>();
但我不知道该怎么做。
你们能帮助我吗?
编辑:所以我可以采取另一种方式,因为Haphazard建议。我把这段代码放在一起,但我不知道这是不是这样做的。我还没有测试过,因为sg是共享偏好的错误,我仍然想弄明白。
SharedPreferences.Editor scoreEditor = myScores.edit();
scoreEditor.putString("DATA", "Thomas" + "-" + "5");
scoreEditor.commit();
HashSet<String> hset=new HashSet<String>();
hset.addAll((Collection<? extends String>) myScores.getAll());
ArrayList<String> LIST = new ArrayList<String>(hset);
答案 0 :(得分:3)
SharedPreferences
Editor
不接受列表,但接受Sets。您可以将列表转换为HashSet
或类似的内容并将其存储起来。回读后,将其转换为ArrayList
,如果需要可以对其进行排序,你就可以了。
请注意,该集必须是一组字符串,因此您必须坚持使用"Thomas" + "-" + "5"
设置。
编辑:对于您的新更新,我想的更像是
//Retrieve the values
Set<String> set = new HashSet<String>();
set = myScores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
该代码未经测试,但应该可以正常工作
编辑:如果您的API级别低于get/setStringSet()
级别,那么您可以尝试:
1)将您的高分列表转换为分隔字符串。这意味着如果你有[“Tom,1”,“Ed,5”]你可以循环它并将其变成一个像“Tom,1 | Ed,5”这样的字符串。您可以使用setString(..)
轻松存储该内容。
2)如果要重新读取值,请执行getString(..)
然后String.split("|")
以获取原始列表。好吧,它返回一个数组,但可以很容易地转换为一个列表。