我正在使用Retrofit与基于REST的服务进行通信,而在我的Android App中,我有一个本地域模型。为了使我的应用程序与REST服务的任何更改和依赖关系隔离,我想将从REST服务返回的对象转换为我的本地域模型。
目前我通过将response.body()返回的对象传递给模型中相应类的构造函数来实现此目的。这适用于所有基本属性,如整数,字符串等,除了更复杂的对象,如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构造函数之前,我检查了强制转换列表的大小是否为空,并且列表中的元素数是&gt; 0,我得到正确数量的元素,但是当我在构造函数中进行相同的测试时,列表现在为空。
查看类型列表,结果不同。在将对象传递给构造函数和构造函数之前,列表具有相同数量的元素。
这里有某种GC,我不明白吗?当它不在外面时,为什么列表在构造函数中是NULL?
这应该如何构建?
答案 0 :(得分:0)
您不能只使用Serializable
并让您选择使用Retrofit的转换器完成工作吗?
例如,在您的代码中,您可以创建自定义对象implement Serializable
,然后还可以使用@SerializedName
注释对JSON中要映射的字段进行注释,并将json属性名称作为注释的参数,如this。
希望这可能有所帮助。