2017-01-22 5 views
0

Ich benutze Gson in meiner Android-App, um Alarme in Form meiner NDAlarm-Klasse zu speichern. Aber wenn ich versuche, mein Array von NDAlarms in JSON zu konvertieren, friert die App ein und der Garbage Collector wird verrückt![Android] Google Gson Absturz-App

Was passiert?

Mein Spar Code in meiner Tätigkeit:

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(); 
} 

ich SaveAlarms in meiner activity's Pause Überschreibung aufrufen.

Meine NDAlarm Klasse:

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); 
} 

}

Ich habe die „zirkuläre Referenz“ Problem mit Gson genannt, über etwas gehört, aber ich weiß nicht, wie es zu identifizieren, oder wie man es beheben.

Bitte Hilfe.

+0

Veröffentlichen Sie auch Ihr Crashprotokoll. – dex

Antwort

1

Ich denke, this question ist ähnlich.

Ihr Problem ist wahrscheinlich etwas mit Serialisierung eines PendingIntent-Objekts zu tun. Um ihn zu stoppen serialisiert man könnte es als vorübergehende erklären:

private transient PendingIntent _AlarmIntent = null; 

... setzen Sie ihn dann, nachdem es deserialising. Oder da alles, was Sie in diesem Fall speichern würden, die Alarmzeit ist, ist es vielleicht besser, das einfach zu Ihren freigegebenen Einstellungen hinzuzufügen und den Gson-Kram auszulassen.

+0

Danke, dass Sie darauf hingewiesen haben! Ich habe damit begonnen, eine PendingIntent-ID anstelle des tatsächlichen PendingIntent zu speichern. – scottyaim