我读了很多文章,但都没有回答我的问题。我正在尝试从已存储的SharedPreferences
中获取自定义类类型AnAlarm
的ArrayList
。我已经将ArrayListalarms
作为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);
当我评论上面的行时,剩下的程序运行得很顺利。
以下是我的自定义类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;
}
}
在这个类中还有一个no Arguments构造函数以及所有的getters
和setters
。为什么我会遇到这个问题?提前感谢!
如果在自定义类中声明了第三个类的实例,则不能简单地使用Gson
。
在您的例子中,您的类AnAlarm
中有Calendar
的实例。请将其删除,然后重试!
如果您被迫使用它,请为您的类使用实例创建者。请参阅本文:https://futurestud.io/tutorials/gson-advanced-custom-instance-creator