【问题标题】:Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index' error in dart未处理的异常:类型“字符串”不是飞镖中“索引”错误的“int”类型的子类型
【发布时间】:2021-10-16 14:20:12
【问题描述】:

我尝试解码请求后从服务器返回的 json 文件,但是当我想解码 json 时显示错误 这是我的解码代码:

 var loginJson = jsonDecode(utf8.decode(response.bodyBytes));
      var model = idResponseModel(
          loginJson['id'],
          loginJson["fname"],
          loginJson["lname"],
          loginJson["nationalCode"],
          loginJson["gender"],
          loginJson["bornDate"],
          loginJson["phoneNumber"],
          loginJson["cardNumber"],
          loginJson["enabled"]);
      print(model.id);

控制台说它发生在 loginJson['id']

来自服务器的 id 是这样的:

"id": "5de0a41e-9a6f-4b55-9567-024cd0fdbfc5"

【问题讨论】:

  • idResponseModel 的第一个参数是什么?细绳?不?那你期待什么?
  • @Selvin 我知道我也将第一个参数更改为 int 但没有用

标签: android flutter dart postman decode


【解决方案1】:

直接使用 [bodyBytes] 有点惊讶尝试使用 Response getter → body

String get body => _encodingForHeaders(headers).decode(bodyBytes);

在你的情况下应该是这样的:

var loginJson = jsonDecode(response.body);
      var model = idResponseModel(
          loginJson['id'],
          loginJson["fname"],
          loginJson["lname"],
          loginJson["nationalCode"],
          loginJson["gender"],
          loginJson["bornDate"],
          loginJson["phoneNumber"],
          loginJson["cardNumber"],
          loginJson["enabled"]);
      print(model.id);

我现在无法检查,但如果有效,请告诉我

【讨论】:

    【解决方案2】:

    此错误意味着loginJson.[] 需要一个 int,而不是 String。所以loginJson 可能实际上是一个列表,而不是您期望的地图。您可以打印loginJson.runtimeType查看。

    【讨论】:

      【解决方案3】:

      除非您发布整个 JSON,否则这个问题是不够的且不可重现...因为您可能认为您已经得到响应,同时尝试从错误的一个节点获取数据(id 是一个字符串索引,但遇到意外的数字索引)。这正是您的示例数据和错误消息组合起来没有提供最小意义的原因。

      【讨论】:

        猜你喜欢
        • 2021-11-16
        • 2020-10-03
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多