我反序列化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>
,我无法(或者至少不知道如何)执行此“技巧”。整个IWorkout列表是这样序列化的:
private String workoutListToJsonString(List<IWorkout> list) {
Gson gson = new Gson();
String jsonString = gson.toJson(list);
return jsonString;
}
,当我尝试反序列化时,它会引发与以前相同的错误。
有人对如何解决这个问题有任何想法吗?
我尝试使用Narthi提供的适配器,但没有成功。
预先感谢