簡體   English   中英

保存並檢索ArrayList到SharedPreferences

[英]Save and Retrieving ArrayList to SharedPreferences

這是我的保存程序代碼,它將得分,日期和玩家名稱保存到排行榜:

mLeaderboardlist = new ArrayList<>();
   Leaderboardmodel s = new Leaderboardmodel();
   s.setDate("07/24/17");
   s.setName(player.getText().toString());
                    s.setScore(Integer.parseInt(String.valueOf(yourScore.getText())));
            Tab1Normal.mLeaderboardlist.add(s);
            SharedPreferences appSharedPrefs = PreferenceManager
                            .getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
                    Gson gson = new Gson();
                    String json = gson.toJson(s);
                    prefsEditor.putString("MyObject", json);
                    prefsEditor.apply();
                    prefsEditor.commit();

這是我在sharedpreference中檢索的處理程序代碼:

 SharedPreferences appSharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(this.getActivity().getApplicationContext());
        Gson gson = new Gson();
        String json = appSharedPrefs.getString("MyObject", "");
        Type type = new TypeToken<ArrayList<Leaderboardmodel>>(){}.getType();
        ArrayList<Leaderboardmodel> leaderboard= gson.fromJson(json, type);
            Collections.sort(leaderboard);
            adapter = new ListLeaderBoardAdapter(getActivity(), leaderboard);
            lvLeaderboardlist.setAdapter(adapter);

保存保存部分工作正常,但檢索部分顯示錯誤並使應用程序崩潰,錯誤顯示:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期為BEGIN_ARRAY,但在第1行第2列路徑中為BEGIN_OBJECT $

更改此行

ArrayList<Leaderboardmodel> leaderboard= gson.fromJson(json, type);

對此

Leaderboardmodel[] leaderboard= gson.fromJson(json, Leaderboardmodel[].class);

看看是否可行。 希望如此。

更新:

您需要創建一個Leaderboardmodel數組列表,然后調用sort。

ArrayList<Leaderboardmodel > leaderboardmodels = new ArrayList<>();
leaderboardmodels.addAll(leaderboard);
Collections.sort(leaderboardmodels);

嘗試調試裝入的json ,看看您是否真的得到了有效的json字符串。

這樣也已經存在類似的問題: 使用GSON解析通用ArrayList

問題是您放置了一個對象,而不是json。

Leaderboardmodel s = new Leaderboardmodel();
....
String json = gson.toJson(s);
prefsEditor.putString("MyObject", json);

你需要把你的數組

mLeaderboardlist = new ArrayList<>();
...
String json = gson.toJson(mLeaderboardlist );

保存時,保存的是對象而不是arraylist,

String json = gson.toJson(s);

這里s是Leaderboardmodel的對象,而不是Leaderboardmodel的數組列表

因此,當您進行檢索時,將其作為對象而不是數組列表進行檢索,

Type type = new TypeToken<Leaderboardmodel>(){}.getType();
Leaderboardmodel leaderboard= gson.fromJson(json, type);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM