Я храню ArrayList (от Gson до Json), чтобы я мог поместить его в общие настройки (это единственный способ, которым я знаю, как это сделать). Проблема заключается в первой инициализации приложения, Gson из Json аварийно завершает работу с IllegalStateException (ожидаемый BEGIN_ARRAY, но был STRING в строке 1, путь 1, столбец $). Я уверен, что я знаю, что это вызвано получением общих настроек с помощью значение по умолчанию (строки), и их нельзя «десериализовать» обратно в массивы ... но я не знаю, как его обойти. Это два моих метода, которые отлично работают, когда в массивах есть данные для хранения и извлечения.
public void gsonFromJson() {
String monthlyEmailList = dailySharPref.getString("monthlyEmailList", "no data");
String totalHrsList = dailySharPref.getString("totalHrsList", "0");
Type type1 = new TypeToken<ArrayList<String>>() {
}.getType();
Type type2 = new TypeToken<ArrayList<Integer>>() {
}.getType();
monthlyEmailArray = gson.fromJson(monthlyEmailList, type1);
totalHoursArray = gson.fromJson(totalHrsList, type2);
}
public void gsonToJson() {
String monthlyEmailList = gson.toJson(monthlyEmailArray);
String totalHrsList = gson.toJson(totalHoursArray);
dailySharPrefEditor.putString("monthlyEmailList", monthlyEmailList);
dailySharPrefEditor.putString("totalHrsList", totalHrsList);
dailySharPrefEditor.putBoolean(hasStarted, isDayStarted());
dailySharPrefEditor.putBoolean(hasEnded, isDayEnded());
dailySharPrefEditor.apply();
}