我浏览了许多文章,但没有一篇回答我的情况。
我试图从已经存储的ArrayList
中获取我的自定义类类型AnAlarm
的SharedPreferences
。我已经将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;
}
}
在此类中,还存在一个无参数的构造函数,并且所有
getters
和setters
都存在。为什么会出现此问题?提前致谢! 最佳答案
仅当您在自定义类中声明了第三类的实例时,才不能使用Gson
。
在您的情况下,您的类Calendar
中有AnAlarm
的实例。删除并重试!
如果仍然被迫使用它,请为您的班级使用实例创建器。看到这篇文章:
https://futurestud.io/tutorials/gson-advanced-custom-instance-creator