2017-12-05 8 views
0

Retrofit을 사용하여 REST 기반 서비스와 통신하고 Android App에 로컬 도메인 모델이 있습니다. 내 응용 프로그램을 REST 서비스의 변경 사항 및 종속성에서 격리시키기 위해 REST 서비스에서 반환 된 객체를 로컬 도메인 모델로 변환하려고합니다.개조 회신을 로컬 모델로 변환하는 중 오류가 발생했습니다.

현재 response.body()에서 반환 한 객체를 내 모델에서 해당 클래스의 생성자로 전달하여이 작업을 수행하고 있습니다. 이것은 int, Strings 등의 모든 기본 속성에 매우 효과적이며 List <>과 같은 더 복잡한 개체는 제외됩니다. 다음은 클래스입니다.

public abstract class MetadataAsset<T> implements Comparable<T> { 

    protected Long id; 
    protected String title; 
    protected String description; 
    protected List<String> genres; 
    protected List<CastMember> cast; 

    public MetadataAsset(no.external.entities.MetadataAsset metadataAsset) { 
     this.id = metadataAsset.id; 
     this.title = metadataAsset.title; 
     this.description = metadataAsset.description; 
     this.genres = metadataAsset.genres; 

     this.cast = new ArrayList<>(); 
     if(metadataAsset.cast != null) { 
      for (no.external.entities.CastMember castMember : metadataAsset.cast) { 
       this.cast.add(new CastMember(castMember)); 
      } 
     } 

    } 

    public Long getId() { 
     return id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public List<String> getGenres() { 
     return genres; 
    } 

    public List<CastMember> getCast() { 
     return cast; 
    } 
} 

생성자에게 전달 된 객체는 Retrofit에서 response.body()가 반환 한 객체입니다. 이 객체를 MetadataAsset 생성자에 전달하기 전에 캐스트 목록의 크기가 null이 아니고 목록의 요소 수가> 0이고 정확한 수의 요소를 얻었는지 확인합니다. 그러나 생성자 내부에서 동일한 테스트를 수행 할 때 , 목록은 이제 null입니다.

장르 목록을 보면 결과가 다릅니다. 목록은 생성자에 객체를 전달하기 전과 생성자 내부에서 모두 동일한 수의 요소를가집니다.

내가 이해할 수없는 일종의 GC가 여기에 있습니까? 왜 외부에 없을 때리스트가 생성자 내부에서 NULL이 될까요?

어떻게 구성해야합니까?

+0

글쎄, 당신은 빈 생성자를 만들 수 있습니다, 나는 retrofit이 항상 빈 생성자를 요구한다고 생각합니다. 하지만 오류를 붙여 넣을 수 있습니까? 도움이 될 것입니다. – guisantogui

답변

0

그냥 Serializable을 사용하고 당신이 개조 작업을 위해 선택한 변환기가 작동하지 않을 수 있습니까?

는 예를 들어, 코드에서, 당신은 this처럼 JSON은 주석에 매개 변수로 이름을 속성 전달 사용자 정의가 implement Serializable 개체를하고 또한 당신이 그들에 @SerializedName 주석과 JSON에서 매핑하려는 필드에 주석을 만들 수 있습니다 .

희망 사항. 도움이 될 수 있습니다.