这是我的保存程序代码,这会将得分,日期和玩家名称保存到排行榜:
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();
这是我在共享偏好中处理的检索程序代码:
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 $
答案 0 :(得分:0)
更改此行
Leaderboardmodel[] leaderboard= gson.fromJson(json, Leaderboardmodel[].class);
到这个
ArrayList<Leaderboardmodel > leaderboardmodels = new ArrayList<>();
leaderboardmodels.addAll(leaderboard);
Collections.sort(leaderboardmodels);
看看它是否有效。 我希望如此。
更新
您需要创建Leaderboardmodel的数组列表,然后调用sort。
val
答案 1 :(得分:0)
尝试调试加载的json
,看看你是否真的得到了有效的json String。
答案 2 :(得分:0)
问题是你放了一个对象,而不是一个json。
constructor(props) {
super(props);
this.state = {
isLoading: true,
PackageNo: '',
PackageNoSeq: '',
hasError: false,
errorMessage: ''
}
}
您需要放置数组
Leaderboardmodel s = new Leaderboardmodel();
....
String json = gson.toJson(s);
prefsEditor.putString("MyObject", json);
答案 3 :(得分:0)
当你保存时,你保存的对象不是arraylist,
String json = gson.toJson(s);
这里是Leaderboardmodel的对象而不是Leaderboardmodel的arraylist
因此,当您检索时,将其检索为对象而不是数组列表,
Type type = new TypeToken<Leaderboardmodel>(){}.getType();
Leaderboardmodel leaderboard= gson.fromJson(json, type);