麻烦“For-Loop范围必须有一个’iterator()’方法”和JSON问题

我正在教自己Kotlin和Android开发。 所以,我相信我的问题大部分是缺乏知识,但是我已经挂了这一两天了。 我认为我的问题部分是我的JSON查询,大部分是我的菜鸟。

在我下面的for循环中,我从IDE中得到以下错误:“For-Loop范围必须有一个”iterator()方法“。 这是关于’cycloneList’in:for(stormInfo in cycloneList)

我已经链接了我使用的“虚拟”JSON数据可以在这里find: https : //api.myjson.com/bins/19uurt在这个问题上保存一些空间。

问题代码

`var cycloneList = response?.body()?.currenthurricane?.stormInfo?.get(0) if (cycloneList != null) { for (stormInfo in cycloneList) { <<--Problem val newCyclone = "Name: ${cycloneList.stormName}" cycloneStrings.add(newCyclone) } }` 

完整的代码

 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //creates a new CycloneRetriever object from CycloneHelp.kt var retriever = CycloneRetriever() val callback = object : Callback { override fun onResponse(call: Call?, response: Response?) { println("Got a response!") var cycloneList = response?.body()?.currenthurricane?.stormInfo?.get(0) var cycloneStrings = mutableListOf() if (cycloneList != null) { for (stormInfo in cycloneList) { //TODO Figure this out!! val newCyclone = "Name: ${cycloneList.stormName}" cycloneStrings.add(newCyclone) } } var layoutMovieListView = movieListView var movieListAdapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_list_item_1, cycloneStrings) layoutMovieListView.adapter = movieListAdapter } override fun onFailure(call: Call?, t: Throwable?) { println("The thing, it failed!") } } retriever.getCyclones(callback) } 

我正在使用Retrofit来访问/处理JSON数据

改造JSON代码

 interface WeatherWunderGroundAPI { @GET("bins/19uurt") fun getCyclones() : Call } class Cyclones(val currenthurricane: CurrentHurricane) class CurrentHurricane(val stormInfo: List) class StormInfo(val stormName: String) class CycloneRetriever { val service : WeatherWunderGroundAPI init { val = retrofitCyclone Retrofit.Builder().baseUrl("https://api.myjson.com/") .addConverterFactory(GsonConverterFactory.create()).build() service = retrofitCyclone.create(WeatherWunderGroundAPI::class.java) } fun getCyclones(callback: Callback) { val call = service.getCyclones() call.enqueue(callback) } } 

你的stormInfo是一个List ,它提供了强制性的iterator() ,这是你想要迭代的:

 var cycloneList = response?.body()?.currenthurricane?.stormInfo ?: emptyList() for (stormInfo in cycloneList) { } 

希望能帮助到你…