Flutter调用OpenWeatherMap API获取天气值出现类型报错问题
问题根因
你遇到的类型报错,是对API返回的JSON字段层级判断失误导致的。
对照返回的示例结构,weather字段不是普通的键值对字典,而是一个只包含单条天气信息的数组:
"weather": [{"id":721,"main":"Haze","description":"haze","icon":"50n"}]
你原代码里写的weatherData['weather']['main'],相当于拿到数组之后,直接用字符串'main'当索引去取数组元素——数组只支持整数索引,用字符串当索引自然会抛出「String类型无法作为int类型索引」的错误。
修正方法
取值时先定位数组里的第一个元素(也就是索引号0的位置),再读取内部的main字段就行。
把原代码中错误的取值行:
count: weatherData['weather']['main'].toString(),
替换为正确的取值路径:
count: weatherData['weather'][0]['main'].toString(),
这样就能正常拿到Haze这个天气状态值了。
补充说明:你之前写的weatherData['main']['temp']这类取值没有报错,是因为main字段本身就是标准字典结构,和weather的数组结构不一样,所以取值逻辑是通顺的。
内容的提问来源于stack exchange,提问作者recived
相关产品推荐
相关产品推荐

