我试图使用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);我所犯的错误:
不能将java.util.ArrayList)中的putListObject (String java.util.ArrayList)应用于(String java.util.ArrayList)
我会非常感谢你的帮助!
发布于 2017-08-11 07:49:10
TinyDB的kcochibili开发人员在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);另外,当您想从DB获取值时,它将给出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;
}发布于 2016-01-30 12:16:22
尽管Player的任何实例都是Object,但播放器的ArrayList与对象的ArrayList并不相同。将方法签名更改为:
putListObject(String key, ArrayList<Player> objArray)以及循环:
for(Player player : objArray){
objStrings.add(gson.toJson(player));
}https://stackoverflow.com/questions/35101437
复制相似问题