You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Retrofit请求后Page对象中cards数组为null如何解决

解决方案

核心问题1:JSON结构与解析类不匹配

你返回的JSON最外层并非直接是Page对象,而是包裹了一层包含page字段的根对象,直接将Response.body的类型声明为Page时,解析库无法匹配到对应字段,自然获取不到cards的内容。

核心问题2:解析类不符合序列化要求

你当前定义的Cards是Page的非静态内部类,且Page、Cards类都只提供了带参构造函数,缺少无参构造。Gson等JSON解析库通过反射实例化对象时,需要依赖无参构造,且非静态内部类会持有外部类的引用,无法独立实例化,也会导致解析失败。

修正步骤

  1. 新增外层根响应类,匹配JSON最外层结构
public class ApiResponse {
    public Page page;
    // 必须提供无参构造供解析库实例化
    public ApiResponse() {}
}
  1. 修正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;
        }
    }
}
  1. 修改Retrofit接口的返回值类型
    将原来的Call<Page>改为Call<ApiResponse>,请求成功后通过response.body().page即可拿到正确的Page对象,此时内部的cards列表就会有正确的数值。
    如果后续需要解析card字段内的内容,只需要按照JSON结构补充对应的Card、Attribute、Font数据类即可,要求同样是提供无参构造即可。

内容的提问来源于stack exchange,提问作者Denis Jung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:24:00