Muz*_*ain 5 java android json arraylist gson
我读过很多文章,但没有一篇能回答我的问题。我正在尝试从已存储的中获取ArrayList我的自定义类类型。我已将 ArrayList 存储在a 中,现在我尝试使用以下代码获取此ArrayList :AnAlarmSharedPreferencesalarmsSharedPreferencesJson String
            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);
Run Code Online (Sandbox Code Playgroud)
但我收到以下异常:
   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.
Run Code Online (Sandbox Code Playgroud)
在这行代码上:
ArrayList<AnAlarm> alarms=gson.fromJson(alarms_temp_string,type);
Run Code Online (Sandbox Code Playgroud)
当我评论上面的行时,其余的程序运行顺利。
以下是我的自定义类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;
    }
}
Run Code Online (Sandbox Code Playgroud)
在这个类中,还有一个无参数构造函数以及所有的getters和setters都存在。为什么我会遇到这个问题?提前致谢!
小智 6
Gson如果您在自定义类中声明了第三类的实例,则不能简单地使用。
Calendar在你的情况下,你的班级中有 的实例AnAlarm。删除它并重试!
如果您无论如何都被迫使用它,请为您的类使用实例创建器。请参阅这篇文章: https ://futurestud.io/tutorials/gson-advanced-custom-instance-creator