2017-01-22 1 views
0

내 안드로이드 앱에서 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(); 
} 

내 activity's 일시 정지 재정에 SaveAlarms를 호출합니다.

내 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 객체를 serialize하려는 것과 관련이 있습니다. 직렬화를 중지하려면 다음과 같이 일시적으로 선언 할 수 있습니다.

private transient PendingIntent _AlarmIntent = null; 

... 그런 다음 직렬화 해제 한 후에 설정하십시오. 이 경우 저장하는 것은 알람 시간이므로 모두 공유 환경 설정에 추가하고 Gson 항목을 건너 뛰는 것이 좋습니다.

+0

지적 해 주셔서 감사합니다! 실제 PendingIntent 대신 PendingIntent id를 저장하기 시작했습니다. – scottyaim