使用Gson反序列化包含List <myotherinterface>的List <myinterface>

时间:2018-10-21 15:11:49

标签: java android serialization gson deserialization

我反序列化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提供的适配器,但没有成功。

预先感谢

0 个答案:

没有答案
相关问题