Java Android共享首选项TinyDB putListObject frunction

Java Android共享首选项TinyDB putListObject frunction,java,android,Java,Android,我试图使用TinyDB的putListObject函数将对象列表保存到共享首选项,但是我得到了一个错误的第二个参数类型错误。我可以很好地使用putObject函数,只有在使用putListObject函数时才会出现错误 球员级别: public class Player { private String name = ""; private int score = 0; public Player(String name, int score) {

我试图使用TinyDB的
putListObject
函数将对象列表保存到共享首选项,但是我得到了一个
错误的第二个参数类型
错误。我可以很好地使用
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);
public void putListObject(字符串键,ArrayList objArray){
checkForNullKey(key);
Gson Gson=新的Gson();
ArrayList objStrings=新的ArrayList();
用于(对象obj:objArray){
add(gson.toJson(obj));
}
putListString(键、对象字符串);
}
我如何使用该功能:

 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);
ArrayList playerList=new ArrayList();
TinyDB TinyDB=新的TinyDB(本);
tinydb.putListObject(“玩家”,玩家列表);
我得到的错误是:

TinyDB中的putListObject(字符串java.util.ArrayList) 无法应用于(字符串) (java.util.ArrayList)



非常感谢您的帮助

尽管
Player
的任何实例都是
对象
,但Player的
ArrayList
与对象的
ArrayList
并不相同。将方法签名更改为:

putListObject(String key, ArrayList<Player> objArray)

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

用于放置自定义对象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);
arraylistplayers=newarraylist();
ArrayList playerObjects=新的ArrayList();
对于(玩家a:玩家){
添加((对象)a);
}
TinyDB TinyDB=新的TinyDB(本);
tinydb.putListObject(“玩家”,玩家对象);
另外,当您想从DB中获取值时,它会给出ArrayList。因此,您可能希望将它们转换回自定义对象

这方面的一个样本:

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);
}
TinyDB TinyDB=新的TinyDB(本);
ArrayList playerObjects=tinydb.getListObject(“players”,Player.class);
ArrayList players=新的ArrayList();
用于(对象对象对象:播放对象){
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;
}
public void putListPlayer(字符串键,ArrayList playerList){
checkForNullKey(key);
Gson Gson=新的Gson();
ArrayList objStrings=新的ArrayList();
for(玩家:玩家列表){
add(gson.toJson(player));
}
putListString(键、对象字符串);
}
//不需要类mClass参数。因为我们知道这是一名球员!
公共ArrayList getListPlayer(字符串键){
Gson Gson=新的Gson();
ArrayList ObjString=getListString(键);
ArrayList playerList=新的ArrayList();
for(字符串jObjString:objStrings){
Player-Player=gson.fromJson(jObjString,Player.class);
玩家列表。添加(玩家);
}
返回玩家列表;
}

Faith K,我知道“谢谢你”这句话已经过时了,大家都不赞成,但你帮我节省了几个小时的工作时间,我想表达更多的感激之情,而不仅仅是简单的投票!然而,一个完整的工作示例将大大有助于向其他人解释它。如果我多次使用同一个键调用
putListPlayer
,会发生什么?它会继续更新该键的值还是会抛出错误?Hii@Faith K谢谢。我已经使用了你的第二种方式来存储我的自定义数组列表。@RavishJha再次调用
putListPlayer
。或者任何TinyDB函数都将更新上次使用指定键保存的值。