【发布时间】:2023-03-07 17:23:01
【问题描述】:
我有一个 Player 类,它有一个名称和一个分数数组列表。使用按钮动态添加分数。我想使用共享首选项来保存我在主要活动中创建的Arraylist<Player> players。我尝试了几种解决方案,但均未成功。
到目前为止我尝试了什么:
链接: Save ArrayList to SharedPreferences
当我使用 ObjectSerializer 类时,我无法导入包 org.apache.pig.impl.util;这会导致出现错误,例如:
因为 WrappedIOException 在那个包中。
Tinydb: Tiny db 似乎是一个很好的解决方案,但是当我检索数据时出现错误。这些是我从 java 文件中更改的方法:
public void putListObject(String key, ArrayList<Player> playerArray){
checkForNullKey(key);
Gson gson = new Gson();
ArrayList<String> playerStrings = new ArrayList<String>();
for(Player player : playerArray){
playerStrings.add(gson.toJson(player));
}
putListString(key, playerStrings);
}
public ArrayList<Player> getListObject(String key, Class<?> mClass) {
Gson gson = new Gson();
ArrayList<String> objStrings = getListString(key);
ArrayList<Player> objects = new ArrayList<Player>();
for (String jObjString : objStrings) {
Object value = gson.fromJson(jObjString, mClass);
objects.add((Player) value);
}
return objects;
}
public void putListObject(String key, ArrayList<Player> playerArray){
checkForNullKey(key);
Gson gson = new Gson();
ArrayList<String> playerStrings = new ArrayList<String>();
for(Player player : playerArray){
playerStrings.add(gson.toJson(player));
}
putListString(key, playerStrings);
}
玩家类:
public class Player implements Serializable {
private String name;
private ArrayList<Integer> scores = new ArrayList<>();
public Player(String name){
this.name = name;
}
public ArrayList<Integer> getScores() {
return scores;
}
public void setScore(int score) {
scores.add(score);
}
如果有人对如何存储和检索我的播放器数组列表有好的解决方案,请分享
【问题讨论】:
-
在你的
serialize方法中去掉红线代码......你也不需要返回任何东西,所以你也可以去掉它。 -
我没有使用 tinyDb,但如果你能展示你使用它时遇到的错误,那么有人更有可能帮助你。从长远来看,将这些信息存储在数据库中可能是您最好的解决方案。
-
最简单的解决方案是使用 sqlite 数据库。在共享偏好上存储大数据并不是一个好主意.....
标签: java android class arraylist sharedpreferences