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

时间:2017-01-22 19:50:17

标签: java android garbage-collection gson

我在我的Android应用程序中使用gson以我的NDAlarm类的形式保存警报。 但是当我尝试将我的NDAlarms数组转换为json时,应用程序会冻结,垃圾收集器会变得疯狂!

发生了什么事?

我的活动中的保存代码:

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

我在活动的暂停覆盖中调用SaveAlarms。

我的NDAlarm类:

   var array = [
     [
       ['firstName', 'Joe'],
       ['lastName', 'Blow'],
       ['age', 42],
       ['role', 'clerk']
     ],
     [
       ['firstName', 'Mary'],
       ['lastName', 'Jenkins'],
       ['age', 36],
       ['role', 'manager']
     ]
   ]
   
   function transformEmployeeData(array){
     return array.map(a =>{ 
       var obj = {}; 
       a.forEach(a => obj[a[0]] = a[1]); 
       return obj;
     });
   }
   var results = transformEmployeeData(array);
   console.log(results[0]);
   console.log(results[1]);

}

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

请帮助。

1 个答案:

答案 0 :(得分:3)

我认为this question类似。

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

private transient PendingIntent _AlarmIntent = null;

...然后在反序列化之后设置它。或者,因为在这种情况下你所有的存储都是闹钟时间,所以最好只将它添加到你的共享首选项中并跳过任何Gson内容。