Ошибка воспроизведения только после добавления нового свойства в этот класс.
public class FormDataModel {
private String name;
private String description;
private int dbid;
private String localStorageId;
private boolean isEnabled = true;
private boolean isDirty;
private boolean needsUpdate;
private boolean needsUpload;
private FormLocation formLocation;
private String modifiedDate;
private String displayedId;
private String version;
private boolean syncWithWebservice = false;
private List<WebserviceCallModel> calls = new ArrayList<>();
}
В текущей версии я добавил новое свойство (с именем ' вызывает ') к сериализуемому классу. Я храню список FormDataModel, хранящийся в SharedPreferences, сериализованный в виде строки.
При открытии приложения сериализованный и запутанный список:
{"a":"Form Port","b":"Form description","c":482,"d":"775c5a8a-93fc-4257-805d-447bb1da27e2","e":true,"f":false,"g":false,"h":false,"i":3,"j":"2019-03-05T09:21:21","k":"045","l":"001","m":true}]
Ошибка, которую я продолжаю получать, такова:
java.lang.IllegalStateException: ожидалось BEGIN_ARRAY, но было BOOLEAN в строке 1 столбца 193 пути $ [0] .m
Насколько я могу судить, переменная 'syncWithWebservice' обфусцирована с 'm'. Я не могу понять, почему Gson ожидает массив, а не логическую переменную. Я повторяю, этот сбой произошел только после того, как я добавил свойство 'Call' в класс.
Я просто хочу проанализировать список и список вызовов init с пустым списком, если он не найден.
Код десериализации:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
ArrayList<FormDataModel> formList = gson.fromJson(set, new TypeToken<List<FormDataModel>>() {}.getType());
где переменная 'set' - это сериализованный список в памяти, сохраненный в SharedPrefs.
Все остальные общие вопросы синтаксического анализа в SO не помогли, так как формат структуры списка действителен, и его сериализовали и десериализовали нормально перед добавлением нового свойства.
Спасибо.