gpt4 book ai didi

java - Android Shared Preference TinyDB putListObject 函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:22 27 4
gpt4 key购买 nike

我正在尝试使用 TinyDB 的 putListObject 函数将对象列表保存到共享首选项,但我收到了 Wrong 2nd argument type 错误。我可以很好地使用 putObject 函数,错误仅在我使用 putListObject 函数时出现。


玩家类别:

public class Player {

private String name = "";
private int score = 0;

public Player(String name, int score) {
this.name = name;
this.score = score;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}
}

putListObject 函数:

 public void putListObject(String key, ArrayList<Object> objArray){
checkForNullKey(key);
Gson gson = new Gson();
ArrayList<String> objStrings = new ArrayList<String>();
for(Object obj : objArray){
objStrings.add(gson.toJson(obj));
}
putListString(key, objStrings);
}

我是如何使用这个函数的:

ArrayList<Player> playerList = new ArrayList<Player>();

TinyDB tinydb = new TinyDB(this);
tinydb.putListObject("players", playerList);

我得到的错误:

putListObject (String java.util.ArrayList<java.lang.Object>) in TinyDB cannot be applied to (String java.util.ArrayList<com.example.package.Player>)


帮助将不胜感激!

最佳答案

kcochibili TinyDB的开发者在github上回答了这个问题。他说,您必须在触发 putListObject 之前将自定义对象转换为对象。

放置自定义对象 ArrayList 的示例:

ArrayList<Player> players = new ArrayList<Player>();
ArrayList<Object> playerObjects = new ArrayList<Object>();

for(Player a : players){
playerObjects.add((Object)a);
}

TinyDB tinydb = new TinyDB(this);
tinydb.putListObject("players", playerObjects);

此外,当您想从数据库中获取值时,它会给出 ArrayList< Object >。因此,您可能希望将它们转换回您的自定义对象。

一个示例:

TinyDB tinydb = new TinyDB(this);
ArrayList<Object> playerObjects = tinydb.getListObject("players", Player.class);
ArrayList<Player> players = new ArrayList<Player>();

for(Object objs : playerObjects){
players.add((Player)objs);
}

您可以通过转换使用所有自定义对象。我更喜欢的另一种方法是,将所有自定义对象的 get 和 put 方法添加到 TinyDB 类中。例如:

public void putListPlayer(String key, ArrayList<Player> playerList){
checkForNullKey(key);
Gson gson = new Gson();
ArrayList<String> objStrings = new ArrayList<String>();
for(Player player: playerList){
objStrings.add(gson.toJson(player));
}
putListString(key, objStrings);
}

//No need Class<?> mClass parameter. Because we know it is Player!
public ArrayList<Player> getListPlayer(String key){
Gson gson = new Gson();

ArrayList<String> objStrings = getListString(key);
ArrayList<Player> playerList = new ArrayList<Player>();

for(String jObjString : objStrings){
Player player = gson.fromJson(jObjString, Player.class);
playerList.add(player);
}
return playerList;
}

关于java - Android Shared Preference TinyDB putListObject 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com