Flutter类型错误:_InternalLinkedHashMap无法转为Iterable的解决请求
问题解决:TypeError 类型不匹配错误
错误原因
你调用的OpenWeatherMap /weather 接口返回的是单个天气对象(对应Dart中的_InternalLinkedHashMap<String, dynamic>),而非数组类型。但代码中直接用for (var eachItem in jsonData)遍历这个对象,HashMap不属于可迭代类型,因此触发类型不匹配错误。
修正代码
直接解析单个对象并添加到列表即可,无需遍历:
var url = "https://api.openweathermap.org/data/2.5/weather?q=Izmir&appid=$apikey&units=metric"; List<GetWeather> waitems = []; Future getItems() async { try { var response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); // 直接解析接口返回的单个对象 final weatherItem = GetWeather( weather: jsonData['weather'], // 接口中weather字段本身是数组 ); waitems.add(weatherItem); } else { print('请求失败,状态码: ${response.statusCode}'); } } catch (e) { print('处理出错: $e'); } }
额外说明
- 确认
GetWeather类的weather字段类型与接口返回匹配:接口中weather是包含天气信息的数组,所以如果GetWeather的weather参数定义为List<dynamic>或List<Map<String, dynamic>>,就能正确接收数据。 - 如果需要批量获取多个城市的天气,可改用OpenWeatherMap的
/group接口(该接口返回数组),此时才能用遍历方式处理数据。
内容的提问来源于stack exchange,提问作者Emre
相关产品推荐
相关产品推荐

