2017-01-22 56 views
0

我在我的android应用程序中使用gson以保存我的NDAlarm类窗体中的警报。 但是当我尝试将我的NDAlarms数组转换为json时,应用程序冻结,垃圾收集器变得疯狂![Android] Google Gson崩溃应用程序

发生了什么事?

我保存代码在我的活动:

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在我activity's暂停覆盖。

我NDAlarm类:

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但​​我不知道如何识别它或如何解决它。

请帮忙。

+0

发布您的崩溃日志以及。 – dex

回答

1

我认为this question是类似的。

您的问题可能与尝试序列化PendingIntent对象有关。为了阻止它被序列化,你可以声明为瞬态:

private transient PendingIntent _AlarmIntent = null; 

...然后将其设置deserialising之后。或者因为您在这种情况下所存储的只是闹钟时间,所以将它添加到您的共享偏好设置并跳过任何Gson的东西可能会更好。

+0

谢谢指出!我已经开始存储PendingIntent id而不是实际的PendingIntent。 – scottyaim