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

Kotlin中For-Loop迭代器方法错误及JSON数据处理问题排查

问题原因与解决方法

嘿,我来帮你搞定这个困扰你一两天的问题!

错误根源

你遇到的For-Loop range must have an 'iterator()' method错误,核心原因很简单:你试图遍历一个单个对象,而不是可迭代的集合。

看你这段代码:

var cycloneList = response?.body()?.currenthurricane?.stormInfo?.get(0)

这里的.get(0)是从stormInfo这个List<StormInfo>里取出了第一个元素,也就是单个StormInfo对象。而for循环只能遍历实现了Iterable接口的集合(比如List),单个对象没有iterator()方法,所以IDE直接报错了。

解决步骤

1. 修正cycloneList的赋值

去掉.get(0),让cycloneList指向整个stormInfo列表:

var cycloneList = response?.body()?.currenthurricane?.stormInfo

现在cycloneList的类型是List<StormInfo>?,是一个可迭代的集合了。

2. 修正for循环内的变量引用

原来的代码里你用cycloneList.stormName,但现在cycloneList是列表,你应该用循环里的stormInfo变量来访问单个对象的属性:

if (cycloneList != null) {
    for (stormInfo in cycloneList) {
        val newCyclone = "Name: ${stormInfo.stormName}"
        cycloneStrings.add(newCyclone)
    }
}

更简洁的Kotlin写法(可选)

利用Kotlin的空安全和高阶函数,你可以把null检查和循环合并成一行代码,更符合Kotlin的风格:

response?.body()?.currenthurricane?.stormInfo?.forEach { stormInfo ->
    val newCyclone = "Name: ${stormInfo.stormName}"
    cycloneStrings.add(newCyclone)
}

这样就不需要额外的null判断,代码更简洁。

验证数据结构

你的Retrofit数据类定义是正确的:

  • Cyclones包含CurrentHurricane
  • CurrentHurricane包含List<StormInfo>
  • StormInfo包含stormName
    这和你提供的模拟JSON数据结构完全匹配,所以只要修正遍历的对象,问题就能解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:47