亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

反序列化自定義對象的序列化 ArrayList,添加對象,然后重新序列化

反序列化自定義對象的序列化 ArrayList,添加對象,然后重新序列化

慕容森 2022-06-23 16:22:02
我正在嘗試為我正在使用 android studios 制作的應用程序存儲對象的自定義數組列表。每當用戶按下按鈕時,我都需要能夠將新對象添加到列表中。我的方法是首先使用正確的類型(try/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);
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

那是因為您在保存和獲取列表時使用了不同的密鑰。


您可以使用以下方法保存列表:


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);

  }


}


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號