如何用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
相关产品推荐
相关产品推荐

