【问题标题】:RangeError (index): Invalid value: Valid value range is empty: -1RangeError(索引):无效值:有效值范围为空:-1
【发布时间】:2019-12-09 18:39:56
【问题描述】:

试图从服务器获取 json 并将其放入 String 变量中

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_dart_state.cc(148)] Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: -1 #0 List.[] (dart:core-patch/growable_array.dart:147:60) #1 List.elementAt (dart:core-patch/growable_array.dart:356:16)

【问题讨论】:

  • 我假设变量 url 实际上包含一个 URL 对吗?我会在该 try-catch 语句处放置一个断点并单步执行。
  • @Benjamin S. 是的,它有一个 url,是的,我放置了断点,从服务器获取数据工作正常,Json 解码也很好,但是当我尝试将 Json 字符串放入 allData 时发生异常变量

标签: flutter dart


【解决方案1】:

我不知道为什么 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 check if 条件,并且在这一行 examsLastExamId = exams.elementAt(exams.length - 1)['id']; 它通过了一个异常,因为 Exams 没有数据,很容易通过更正条件来解决这个问题:

        if (exams != null && exams.length > 0)

纠正这段代码没什么大不了的,但是当 android studio 在另一个代码行中抛出异常时,很难知道错误在哪里,离要求的行太远了

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 2021-06-16
    • 2019-12-01
    • 2019-07-25
    • 2020-02-16
    • 2021-10-06
    • 2021-11-13
    • 2021-01-01
    • 2020-10-07
    相关资源
    最近更新 更多