물에 살고싶은 개발자

Gson 멈춤 또는 무한루프문제 본문

Android

Gson 멈춤 또는 무한루프문제

돼지사랑 2017. 10. 26. 17:03

안드로이드에서 쉐어드를 편하게 쓰기 위해 객체를 json으로 파싱해주는 gson 라이브러리가 있다.


문제는 이녀석을 쓰다보면 멀쩡히 잘 되던놈이 익셉션도 없이 먹통이 되서 어디선가 무한루프를 도는듯한 반응을 보여줄때가 있는데


스택오버플로우를 뒤져보니 해결법이 나왓다.


(원인은 아직 나도 모르겠다)



본래 gson에 대해 검색해보면 사용법으로 


Gson gson = new Gson();
String json = gson.toJson(tempItem);


이렇게 두줄이 대표적으로 나오게 된다.


처음에는 아무 문제없이 잘 쓸수도있는데


위에 써둔것처럼 문제가 생길 경우가 있다.


이때는 클래스를 하나 생성해주자


public class Exclude implements ExclusionStrategy{

@Override
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}

@Override
public boolean shouldSkipField(FieldAttributes field) {
SerializedName ns = field.getAnnotation(SerializedName.class);
if(ns != null)
return false;
return true;
}
}

스택오버플로우에있는거 그대로 복붙했다.

따로 커스텀할 필요가 없기때문(코드분석을 안해도 아무 지장이 없었기에 안했음)


위 클래스를 생성했으면 gson 오브젝트를 만드는곳을 살짝 바꿔주자


Exclude ex = new Exclude();
Gson gson = new GsonBuilder().addDeserializationExclusionStrategy(ex).addSerializationExclusionStrategy(ex).create();

위에 new Gson()을 위처럼 바꿔주면 (마치 무한루프에 걸린거같은)문제는 해결된다.


해결도 됏고 따로 문제가 생기지않아 분석은 안했으니 분석하고싶으신분들은 하시길..


Comments