gpt4 book ai didi

java - 反序列化自定义对象的序列化 ArrayList,添加对象,然后重新序列化

转载 作者:行者123 更新时间:2023-12-02 10:15:27 25 4
gpt4 key购买 nike

我正在尝试为我使用 android studio 制作的应用程序存储对象的自定义数组列表。每当用户按下按钮时,我需要能够将新对象添加到列表中。我的方法是首先使用正确的类型(try/catch 的 catch)初始化数组列表的空序列化版本。然后将该数组反序列化为名为“RecoTrackGameCollection”的临时数组列表,然后添加新对象,重新序列化该数组并保存它。

我遇到的问题是,当我尝试将任何对象添加到“RecoTrackGameCollection”时,代码失败并运行捕获。

感谢您花时间查看此内容。如果您需要更多信息,请告诉我。

try {
//get shared pref
SharedPreferences prefs = mContext.getSharedPreferences("SavedGames", Context.MODE_PRIVATE);
//deserilize
Gson gson = new Gson();
String serialRecoverList = prefs.getString("SavedGames", "");
Log.wtf("String Recover", serialRecoverList);
Type type = new TypeToken<List<Game>>(){}.getType();
ArrayList<Game> RecoTrackGameCollection = gson.fromJson(serialRecoverList, type);

//add game
RecoTrackGameCollection.add(SearchGameCollection.get(position));

//reserilize
Gson NewGson = new Gson();
String JsonTrakingGames = NewGson.toJson(RecoTrackGameCollection);
SharedPreferences.Editor editor = prefs.edit();

editor.putString("Games", JsonTrakingGames);
editor.commit();


Toast.makeText(mContext , "Game Saved", Toast.LENGTH_LONG).show();

} catch (Exception e) {

Gson gson = new Gson();
String JsonTrakingGames = gson.toJson(TrackGameCollection);
SharedPreferences prefs = mContext.getSharedPreferences("SavedGames", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();

editor.putString("Games", JsonTrakingGames);

editor.commit();

Toast.makeText(mContext , "iniatlizing", Toast.LENGTH_LONG).show();

}

这是游戏类

public class Game {
String name;
double price;
String link;
//constructor
Game(String name, double price,String link){
this.name = name;
this.price = price;
this.link = link;

}

}

我相信我的错误在于数组的反序列化。特别是这一行:

ArrayList<Game> RecoTrackGameCollection = gson.fromJson(serialRecoverList, 
type);

最佳答案

这是因为您在保存和获取列表时使用了不同的 key 。

您可以使用以下命令保存列表:

private void saveGames(Lis<Game> games) {
Gson gson = new Gson();
String json = gson.toJson(games);
SharedPreferences prefs = ctx.getSharedPreferences("SavedGames", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("Games", json);
editor.commit();
}

以及以下内容来获取列表:

private List<Game> getGames(Context ctx) {
Gson gson = new Gson();
SharedPreferences prefs = ctx.getSharedPreferences("SavedGames", Context.MODE_PRIVATE);

String json = prefs.getString("Games", "");
if(json.isEmpty()) {
return new ArrayList<>();
} else {
Type type = new TypeToken<List<Game>>(){}.getType();
return gson.fromJson(json, type);
}

}

关于java - 反序列化自定义对象的序列化 ArrayList,添加对象,然后重新序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716756/

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