Java [Android]谷歌Gson崩溃应用程序

Java [Android]谷歌Gson崩溃应用程序,java,android,garbage-collection,gson,Java,Android,Garbage Collection,Gson,我在android应用程序中使用gson以NDAlarm类的形式保存警报。 但当我试图将我的Ndalarm数组转换为json时,应用程序冻结,垃圾收集器发疯了 发生了什么事 我的活动中的保存代码: private void SaveAlarms() { Log.d("NewDay", "Saving Alarms"); new Thread(new Runnable() { @Override public void run() {

我在android应用程序中使用gson以NDAlarm类的形式保存警报。 但当我试图将我的Ndalarm数组转换为json时,应用程序冻结,垃圾收集器发疯了

发生了什么事

我的活动中的保存代码:

private void SaveAlarms()
{
    Log.d("NewDay", "Saving Alarms");
    new Thread(new Runnable() {
        @Override
        public void run() {
            GsonBuilder builder = new GsonBuilder();
            Gson gson = builder.create();

            String temp = gson.toJson(_Alarms.toArray(), NDAlarm[].class);

            _Editor.putString("Alarms",temp);
            _Editor.commit();
            Log.d("NewDay", "Saved Alarms");
        }
    }).start();
}
我在活动的暂停覆盖中调用SaveAlarms

我的恩达拉姆班:

public class NDAlarm {

private long _AlarmTime = 0;
private PendingIntent _AlarmIntent = null;

public NDAlarm(long time, PendingIntent intent)
{
    _AlarmTime = time;
    _AlarmIntent = intent;
}

public long get_AlarmTime() {
    return _AlarmTime;
}

public void set_AlarmTime(long _AlarmTime) {
    this._AlarmTime = _AlarmTime;
}

public void set_AlarmIntent(PendingIntent _AlarmIntent) {
    this._AlarmIntent = _AlarmIntent;
}

public PendingIntent get_AlarmIntent() {
    return _AlarmIntent;
}

public DateTime ToDateTime()
{
    return new DateTime(_AlarmTime);
}
}

我听说过gson的“循环引用”问题,但我不知道如何识别它或如何修复它

请帮忙。

我想也是这样

您的问题可能与尝试序列化PendingEvent对象有关。要停止序列化,可以将其声明为瞬态:

private transient PendingIntent _AlarmIntent = null;

…然后在反序列化后设置它。或者,由于在这种情况下,您只需要存储报警时间,因此最好将其添加到您的共享首选项中,并跳过任何Gson内容。

也发布您的崩溃日志。感谢您指出!我已经开始存储Pending帐篷id,而不是实际的Pending帐篷。