Android Retrofit解析PokeApi时无法获取stats嵌套数组内容问题
问题原因
你的PokeStats模型类没有完整映射接口返回的所有字段,也没有定义嵌套的stat对象对应的模型,Gson解析时只会给已有的effort字段赋值,其他字段缺失;同时直接打印列表的toString方法默认只会输出对象内存地址,看不到实际内容。
修改步骤
1. 新增嵌套的Stat模型类
新建Stat.java,对应stats数组每个元素内部的stat对象:
public class Stat { private String name; private String url; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
2. 补全PokeStats模型类
修改你现有的PokeStats.java,补全所有返回字段和嵌套的Stat对象:
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.Expose; public class PokeStats { @SerializedName("base_stat") @Expose private Integer baseStat; @Expose private Integer effort; @Expose private Stat stat; public Integer getBaseStat() { return baseStat; } public void setBaseStat(Integer baseStat) { this.baseStat = baseStat; } public Integer getEffort() { return effort; } public void setEffort(Integer effort) { this.effort = effort; } public Stat getStat() { return stat; } public void setStat(Stat stat) { this.stat = stat; } }
3. 修改MainActivity的打印逻辑
遍历列表获取每个元素的字段值,不要直接打印列表的toString:
call.enqueue(new Callback<PokeDetail>() { @Override public void onResponse(Call<PokeDetail> call, Response<PokeDetail> response) { if(!response.isSuccessful()){ Log.i("ERROR", "onResponse: " + response.code()); return; } PokeDetail pokeDetails = response.body(); Log.i("NAME", pokeDetails.getName()); Log.i("Height", pokeDetails.getHeight()); Log.i("Weight", pokeDetails.getWeight()); List<PokeStats> statsList = pokeDetails.getStats(); // 遍历打印所有属性 for (PokeStats stats : statsList) { Log.i("STATS", "基础值:" + stats.getBaseStat() + " 努力值:" + stats.getEffort() + " 属性名:" + stats.getStat().getName() + " 属性链接:" + stats.getStat().getUrl()); } } @Override public void onFailure(Call<PokeDetail> call, Throwable t) { Log.i("ERROR", t.getMessage()); } });
额外优化建议:你可以把
PokeDetail里的height、weight字段类型从String改成Integer,接口返回的这两个字段本身是数字类型,用String虽然也能解析,但后续做计算时还需要额外转换类型。
内容的提问来源于stack exchange,提问作者SIDDHARTH SINGH
相关产品推荐
相关产品推荐

