Android Retrofit请求后Page对象中cards数组为null如何解决
解决方案
核心问题1:JSON结构与解析类不匹配
你返回的JSON最外层并非直接是Page对象,而是包裹了一层包含page字段的根对象,直接将Response.body的类型声明为Page时,解析库无法匹配到对应字段,自然获取不到cards的内容。
核心问题2:解析类不符合序列化要求
你当前定义的Cards是Page的非静态内部类,且Page、Cards类都只提供了带参构造函数,缺少无参构造。Gson等JSON解析库通过反射实例化对象时,需要依赖无参构造,且非静态内部类会持有外部类的引用,无法独立实例化,也会导致解析失败。
修正步骤
- 新增外层根响应类,匹配JSON最外层结构
public class ApiResponse { public Page page; // 必须提供无参构造供解析库实例化 public ApiResponse() {} }
- 修正Page类的定义
public class Page { public List<Cards> cards; // 添加无参构造 public Page() {} public Page(List<Cards> cards) { this.cards = cards; } // 将Cards改为静态内部类,避免依赖外部类实例 public static class Cards { public String card_type; // 若后续需要解析card内的内容,可新增对应Card类并声明该字段 // public Card card; // 添加无参构造 public Cards() {} public Cards(String card_type) { this.card_type = card_type; } } }
- 修改Retrofit接口的返回值类型
将原来的Call<Page>改为Call<ApiResponse>,请求成功后通过response.body().page即可拿到正确的Page对象,此时内部的cards列表就会有正确的数值。
如果后续需要解析card字段内的内容,只需要按照JSON结构补充对应的Card、Attribute、Font数据类即可,要求同样是提供无参构造即可。
内容的提问来源于stack exchange,提问作者Denis Jung
相关产品推荐
相关产品推荐

