我将共享首选项中的LinkedHashMap保存为JSON,如下所示:
LinkedHashMap<Date, Integer> todayHistoryMap = SharedPreferencesManager.getHistoryWeekPointsMap(context);
Date dateCalled = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
int pointsForTodayThisWeek = 6;
todayHistoryMap.put(dateCalled, pointsForTodayThisWeek);
final SharedPreferences.Editor editor = getSharedPreferences(context).edit();
Gson gson = new Gson();
String hashMapString = gson.toJson(todayHistoryMap);
editor.putString(JSON_WEEK_HISTORY_POINTS, hashMapString);
Log.d(TAG, "week points history saved: " + hashMapString);
editor.apply();
现在我像这样检索它:
String storedHashMapString = getSharedPreferences(context).getString(JSON_WEEK_HISTORY_POINTS, "none");
Type type = new TypeToken<LinkedHashMap<Date, Integer>>() {
}.getType();
Gson gson = new Gson();
if (!storedHashMapString.equals("none")) {
try {
LinkedHashMap<Date, Integer> weekPointsHistoryMap = gson.fromJson(storedHashMapString, type);
return weekPointsHistoryMap;
} catch (IllegalStateException | JsonSyntaxException exception) {
Log.d(TAG, "Json error" + exception);
return null;
}
} else return new LinkedHashMap<Date, Integer>();
以下是JSON的示例: {&#34; Sun Dec 31 23:25:01 GMT + 02:00 2017&#34;:1}
现在它总是抛出JsonSyntaxException。我不知道为什么。
由于
答案 0 :(得分:1)
这是因为Gson
不知道您用来存储日期字符串的日期format。 JSON
示例的日期格式为:
“EE MMM d H:m:ss zz y”
当您创建Gson
对象以便从JSON
解析String
时,您应该设置日期格式。
使用此代码:
Gson gson = new GsonBuilder().setDateFormat("EE MMM d H:m:ss zz y").create();
而不是:
Gson gson = new Gson();
尝试在两种方法中更改它。