2017-01-22 17 views
0

Я использую gson в своем приложении Android для сохранения сигналов тревоги в форме моего класса NDAlarm. Но когда я пытаюсь преобразовать свой массив NDAlarms в json, приложение зависает, и сборщик мусора сходит с ума![Android] Google Gson crashing app

Что происходит?

Моя экономия кода в моей деятельности:

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 вместо реального PendingIntent. – scottyaim