我浏览了许多文章,但没有一篇回答我的情况。
我试图从已经存储的ArrayList中获取我的自定义类类型AnAlarmSharedPreferences。我已经将ArrayList alarms作为SharedPreferences存储在Json String中,现在我尝试使用以下代码来获取此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);


当我评论以上内容时,其余程序运行平稳。

以下是我的自定义类AnAlarm代码:

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;
    }


}


在此类中,还存在一个无参数的构造函数,并且所有getterssetters都存在。为什么会出现此问题?提前致谢!

最佳答案

仅当您在自定义类中声明了第三类的实例时,才不能使用Gson

在您的情况下,您的类Calendar中有AnAlarm的实例。删除并重试!

如果仍然被迫使用它,请为您的班级使用实例创建器。看到这篇文章:
https://futurestud.io/tutorials/gson-advanced-custom-instance-creator

08-18 04:07