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

如何用Retrofit/OkHttp遍历获取到的全部List<Promo>数据对象

如何遍历从API获取的Promo列表?

看起来你已经成功从API拿到了List<Promo>数据,但现在想替换掉手动用get(0)逐个取元素的方式,改成循环遍历所有Promo对象对吧?这很简单,我给你几种常用的实现方式,结合你的代码来改:

方法1:普通for循环(用索引get(i),就是你想尝试的方式)

这种方式需要先判断列表不为空,然后通过索引遍历每个元素:

List<Promo> jsonData = response.body();
// 先做非空判断,避免空指针异常
if (jsonData != null && !jsonData.isEmpty()) {
    // 遍历列表的每个索引
    for (int i = 0; i < jsonData.size(); i++) {
        // 通过get(i)拿到对应位置的Promo对象
        Promo currentPromo = jsonData.get(i);
        // 取出你需要的字段
        String promoID = currentPromo.getId_promo();
        String promoTipe = currentPromo.getPromo_type();
        String promoValue = currentPromo.getValue_based();
        String promoName = currentPromo.getPromo_name();
        
        // 这里可以添加你的业务逻辑,比如打印日志、存储数据等
        Log.i("TESTER", String.format("第%d个促销:ID=%s,名称=%s", i+1, promoID, promoName));
    }
}

方法2:增强for循环(更简洁,不需要索引)

这种方式不需要手动处理索引,直接遍历每个Promo对象,代码更清爽:

List<Promo> jsonData = response.body();
if (jsonData != null && !jsonData.isEmpty()) {
    // 直接遍历列表中的每个Promo实例
    for (Promo promo : jsonData) {
        String promoID = promo.getId_promo();
        String promoTipe = promo.getPromo_type();
        String promoValue = promo.getValue_based();
        String promoName = promo.getPromo_name();
        
        Log.i("TESTER", String.format("促销:ID=%s,名称=%s", promoID, promoName));
    }
}

方法3:Java 8+ Lambda forEach(极简写法)

如果你的项目用的是Java 8及以上版本,可以用Lambda表达式的forEach方法,代码更简洁:

List<Promo> jsonData = response.body();
// 非空判断后直接遍历
if (jsonData != null) {
    jsonData.forEach(promo -> {
        String promoID = promo.getId_promo();
        String promoTipe = promo.getPromo_type();
        String promoValue = promo.getValue_based();
        String promoName = promo.getPromo_name();
        
        Log.i("TESTER", String.format("促销:ID=%s,名称=%s", promoID, promoName));
    });
}

注意事项

  • 一定要做非空判断:API可能返回空列表或者请求失败返回null,直接遍历会抛出NullPointerException,所以先判断jsonData != null且不为空是很必要的。
  • 补充Promo类的getter方法:看你提供的Promo.java代码,只有getId_promo()和getPromo_name(),还缺少getPromo_type()和getValue_based()方法,记得补上,不然编译会报错:
// 在Promo类中添加这两个方法
public String getPromo_type() {
    return promo_type;
}

public String getValue_based() {
    return value_based;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:07:54