![](/img/trans.png)
[英]How to save an arrayList<LatLng> with 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.