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

如何将Retrofit响应映射至数据模型类?现有代码优化诉求

解决方案:直接存储完整的模型对象列表

其实你已经走在正确的路上了——你的Retrofit Call已经用了Call<List<OctoModel2>>泛型,Gson转换器会自动把JSON响应解析成完整的OctoModel2对象列表,根本不需要手动逐个提取字段到单独的ArrayList里。下面是修改后的代码和步骤:

1. 先定义全局的模型列表

在你的类中声明一个用来存储所有竞赛对象的List,确保能在onResponse方法中访问:

private List<OctoModel2> contestList = new ArrayList<>();

2. 修改onResponse方法,直接获取完整对象列表

替换你原来逐个提取字段的循环逻辑,直接处理整个对象列表:

@Override
public void onResponse(Call<List<OctoModel2>> call, Response<List<OctoModel2>> response) {
    int statusCode = response.code();
    
    // 先做安全判断:请求成功且响应体不为空,避免空指针崩溃
    if (response.isSuccessful() && response.body() != null) {
        List<OctoModel2> fetchedContests = response.body();
        
        // 按照你的原有逻辑判断:如果新获取的列表比现有列表大,就更新数据
        if (fetchedContests.size() > contestList.size()) {
            // 替换原有列表(适合刷新场景)
            contestList.clear();
            contestList.addAll(fetchedContests);
            
            // 如果是加载更多场景,直接追加新数据即可:
            // contestList.addAll(fetchedContests);
        }

        // 如果你需要单独获取某个对象的字段(比如原来的businessId和submit_button_text),直接从列表中取
        if (!contestList.isEmpty()) {
            // 和你原来循环到最后一个元素的逻辑一致,取列表最后一个对象
            OctoModel2 lastContest = contestList.get(contestList.size() - 1);
            businessId = String.valueOf(lastContest.getBusinessId());
            submit_button_text = lastContest.getSubmitButtonText();
        }
    } else {
        // 处理请求成功但响应体为空的情况
        Log.w("ContestFetch", "Request succeeded but response body is null");
    }
}

3. 后续使用字段的方式

之后你需要任何字段时,直接遍历contestList即可,比如:

// 遍历所有竞赛对象,获取需要的字段
for (OctoModel2 contest : contestList) {
    String contestTitle = contest.getTitle();
    int contestId = contest.getId();
    String shortDesc = contest.getDescShort();
    String logoUrl = contest.getLogoUrl();
    // ... 其他字段都可以通过对应的getter方法获取
}

为什么这样更好?

  • 代码更简洁,不需要维护多个零散的ArrayList,减少出错概率
  • 模型对象的结构更清晰,后续接口字段变更时,只需要修改OctoModel2类,不用调整业务逻辑
  • 更符合面向对象的编程思想,把相关字段封装在一个对象里,可读性和可维护性更强

内容的提问来源于stack exchange,提问作者Trent Pierce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:04