无法为接口 android.app.IAlarmManager 调用无参数构造函数

Unable to invoke no-args constructor for interface android.app.IAlarmManager

我浏览了很多文章,但其中 none 回答了我的问题。 我正在尝试从已存储的 SharedPreferences 中获取自定义 class 类型 AnAlarmArrayList。我已将 ArrayList alarms 作为 Json String 存储在 SharedPreferences 中,现在我正尝试使用以下代码获取此 ArrayList

            String alarms_temp_string=preferences.getString("alarms",null);
            if(alarms_temp_string==null){
               alarms =new ArrayList<AnAlarm>();
               }

            Gson gson = new Gson();
            Type type=new TypeToken<ArrayList<AnAlarm>> (){}.getType();
            ArrayList<AnAlarm> alarms=gson.fromJson(alarms_temp_string,type);
            adapter=new RecyclerViewAdapter(alarms);

但我收到以下异常:

   java.lang.RuntimeException: Unable to invoke no-args constructor for interface android.app.IAlarmManager. Registering an InstanceCreator with Gson for this type may fix this problem.

在这行代码中:

ArrayList<AnAlarm> alarms=gson.fromJson(alarms_temp_string,type);

当我注释掉上面这行的时候,剩下的程序就顺利运行了。

以下是我的自定义classAnAlarm代码:

public class AnAlarm {

    private Calendar calendar;

    public AnAlarm(){}

    public AnAlarm(Calendar calendar) {

        this.calendar = calendar;

    }

    public Calendar getCalendar() {
        return calendar;
    }

    public void setCalendar(Calendar calendar) {
        this.calendar = calendar;
    }


}

在这个 class 中还有一个 无参数构造函数 以及所有 getterssetters 都存在。为什么我会遇到这个问题?提前致谢!

如果您在自定义 class 中声明了第三个 class 的实例,则不能简单地使用 Gson

在你的情况下,你的 class AnAlarm 中有 Calendar 的实例。删除它并重试!

如果您无论如何都被迫使用它,请为您的 class 使用 实例创建者 。见这篇文章: https://futurestud.io/tutorials/gson-advanced-custom-instance-creator