我在我的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的“循环引用”问题,但我不知道如何识别它或如何修复它。
请帮助。
答案 0 :(得分:3)
我认为this question类似。
您的问题可能与尝试序列化PendingIntent对象有关。要阻止它被序列化,你可以将它声明为瞬态:
private transient PendingIntent _AlarmIntent = null;
...然后在反序列化之后设置它。或者,因为在这种情况下你所有的存储都是闹钟时间,所以最好只将它添加到你的共享首选项中并跳过任何Gson内容。