2017-01-22 58 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