【发布时间】:2019-10-30 06:47:24
【问题描述】:
我试图到达数组的位置 1,但在颤振飞镖中出现范围错误 0:1。
我尝试了各种方法来 json.decode(data) 但我不断收到以下错误,
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理异常:RangeError(索引):无效值:只有有效值为0:1
{
"location": {8 items},
"current": {23 items},
"forecast": {
"forecastday": [
{
"date": "2019-06-16",
"date_epoch": 1560643200,
"day": {15 items},
"astro": {6 items},
"hour": [24 items]
},
{
"date": "2019-06-17",
"date_epoch": 1560729600,
"day": {15 items},
"astro": {6 items},
"hour": [24 items]
}
]
}
}
import 'dart:convert';
import 'dart:async';
Future<void> getData() async {
http.Response response = await http.get('https://api.xyz'); // ( See the json copied above)
if (response.statusCode == 200) {
String data = response.body;
var decodedData = json.decode(data);
Map dataJ = json.decode(data);
List fc = dataJ['forecast']['forecastday'];
var fcc = decodedData['forecast']['forecastday'];
print(fc[0]['date']); // works
print(fcc[0]['date']); // works
print(json.decode(data)['forecast']['forecastday'][0]['date']); // works
print(fc[1]['date']); // Fails range error expects 0 got 1
print(fcc[1]['date']); // Fails range error expects 0 got 1
print(json.decode(data)['forecast']['forecastday'][1]['date']); // Fails range error expects 0 got 1
// -> [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: RangeError (index): Invalid value: Only valid value is 0: 1
} else {
print(response.statusCode);
}
}
我期望得到的是接下来几天的日期而不是错误。
我还可以进一步通过数组(仍然在预测日 0 位置)它有效。如果我将 forecastday 更改为高于 0 的值,它会失败吗?
print(fc[0]['hour'][4]['wind_dir']);
【问题讨论】:
-
它适用于所有情况。你检查响应数据了吗?
-
感谢您的回复。响应数据在那里。不过,它确实在控制台中被缩短了,在 android studio 中,因为我只打印结果。不确定这是不是预期的行为。
-
如果您
print(fcc)会发生什么?是否显示:[Instance of Map, Instance of Map,...]? -
如果我打印 fcc 我没有收到该消息,我会收到一些 json。从此开始。 [{日期:2019-06-16,date_epoch:1560643200 ....
-
如果我尝试获取 forecastday 的 .length 它返回 1 而不是 2。我不知道为什么。打印结果是否有可能导致问题的最大字符限制或文件大小?