У меня были огромные проблемы с десериализацией List<IWorkout>
, так как это выкинуло бы
java.lang.RuntimeException: Unable to start activity ComponentInfo{MY PACKAGE}: java.lang.RuntimeException: Unable to invoke no-args constructor for interface MY INTERFACE. Registering an InstanceCreator with Gson for this type may fix this problem.
Но я решил это, десериализовав его до List<Workout>
(который реализует интерфейс IWorkout), а затем добавьте его в List<IWorkout>
.
Пример кода моего решения:
public ArrayList <IWorkout> loadUserWorkoutList(){
Gson gson = new Gson();
Type workoutListType = new TypeToken<ArrayList<Workout>>(){}.getType();
List <Workout> workoutList = gson.fromJson(loadWorkoutDataFromSharedPreferences(), workoutListType);
if (workoutList == null){
workoutList = new ArrayList<>();
}
ArrayList<IWorkout> iWorkoutList = new ArrayList<>(workoutList);
return iWorkoutList;
}
Но теперь проблема состоит в том, что Тренировка содержит еще один List<IExercise>
, который я могу 't (или, по крайней мере, не могу понять, как) выполнить этот «трюк».Весь список IWorkout сериализуется следующим образом:
private String workoutListToJsonString(List<IWorkout> list) {
Gson gson = new Gson();
String jsonString = gson.toJson(list);
return jsonString;
}
и выдает ту же ошибку, что и раньше, когда я пытаюсь десериализовать его.
У кого-нибудь есть идеи, как решить эту проблему?
Я пытался использовать адаптер, предоставленный Narthi , но безуспешно.
Заранее спасибо