Flutter RangeError(索引):无效值:有效值范围为空:-1
尝试从服务器获取json并将其放入字符串变量中Flutter RangeError(索引):无效值:有效值范围为空:-1,flutter,dart,Flutter,Dart,尝试从服务器获取json并将其放入字符串变量中 var allData; var userMapOfInfo; var url = "my url"; var response1 = await http.get(url); try { userMapOfInfo = jsonDecode(response1.body); //here i'm sure there is valid json data print(userMapOfInfo); a
var allData;
var userMapOfInfo;
var url =
"my url";
var response1 = await http.get(url);
try {
userMapOfInfo = jsonDecode(response1.body); //here i'm sure there is valid json data
print(userMapOfInfo);
allData = response1.body; //this line cause the error
} catch (e) {
return "yok";
}
完全例外:
[VERBOSE-2:ui\u dart\u state.cc(148)]未处理的异常:RangeError(索引):无效值:有效值范围为空:-1
#0列表。[](dart:core patch/Growtable_阵列。dart:147:60)
#1 List.elementAt(dart:core patch/growtable_array.dart:356:16)
我不知道为什么android studio会在与实际错误无关的代码行中显示错误,在问题代码下方有这段代码
var examsLastExamId = 0;
try {
var exams = userMapOfInfo['student_exams'];
if (exams != null)
examsLastExamId = exams.elementAt(exams.length - 1)['id'];
} finally{
print(examsLastExamId);
}
问题如下:exams不是null,但它是空数组,因此它通过了null检查if条件,在这一行中examslatexamid=exams.elementAt(exams.length-1)['id']代码>通过异常进行检查,因为考试没有数据,所以通过将条件更正为以下情况很容易解决此问题:
if (exams != null && exams.length > 0)
更正这段代码不是什么大不了的事,但是当android studio在另一个代码行抛出异常时,很难知道错误在哪里,因为它与所需的代码行相距甚远我假设变量url
实际上包含一个url,对吗?我会在try-catch语句处放置一个断点并逐步执行。@Benjamin S。是的,它有一个url,是的,我放置了断点,从服务器获取数据工作正常,Json解码也正常,但当我试图将Json字符串放入allData变量时出现异常