【问题标题】:Flutter Qs :Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'Flutter Qs:未处理的异常:类型'_InternalLinkedHashMap<String,dynamic>'不是'Iterable<dynamic>'类型的子类型
【发布时间】:2021-09-12 08:17:22
【问题描述】:

这是我从 json 响应转换的地方,我只想获取一些响应并将其显示在我的应用程序上,

Future <List<PNLDATA>>_getPNLCONTENT() async {
    var biller = "PNLpre";
    var idPel = ContentPNLController.text;
    var params = ContentPNLNumController.text.replaceAll(".", "");
    var data = await ContentPre(Bill, ID, prm);
    var jsonData = json.decode(data);
    var jsonProduk = jsonData["VALUE"];
    List< PNLDATA > pnldata = [];
    for (var data in jsonProduk) {
      pnldata.add(
          new PNLDATA(
          data['dt_name'], data['dt_trs'], data['dt_GTag'], data['dt_GAd'], data["dt_Gsum"])
      );
    }
    print(pnldata);
    return pnldata;
  }

错误信息

[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'

Json 响应:

flutter: {
    "RC": "00",
    "CMD": "PNLContent",
    "VALUE": {
        "dt_status": "SUCCESS",
        "dt_name": "Caramel",
        "dt_trs": "0000000001",
        "dt_GTag": "00002",
        "dt_GAd": "Macchiato",
        "dt_Gsum": "22500",
        "dt_Urs" : "22212",
        },
}

PNLDATA 类

class PNLDATA {
  final String dt_name;
  final String dt_trs;
  final String dt_GTag;
  final String dt_GAd;
  final String dt_Gsum;

  PNLDATA(this. dt_name, this. dt_trs, this.dt_GTag,this.dt_dt_GAd,this.dt_Gsum);
}

【问题讨论】:

  • 你能提供你的json响应吗?
  • 等我更新Qs
  • 还有你的PNLDDATA类和你的pnldata方法
  • 你不能像你正在做的那样通过 for 循环迭代 Map jsonProduk
  • 哦,真的。您的dataMap 类型。所以你不能为此使用 for 循环

标签: flutter dart


【解决方案1】:

我看到了一些错误。首先,您在jsonProduk 处获得Map 值并对其进行迭代。您需要遍历 List

如果您想返回单个值,因为 json 将始终包含 1 个值,您可以尝试以下代码:

Future<PNLDATA> _getPNLCONTENT() async {
    var biller = "PNLpre";
    var idPel = ContentPNLController.text;
    var params = ContentPNLNumController.text.replaceAll(".", "");
    var data = await ContentPre(Bill, ID, prm);
    var jsonData = json.decode(data);
    var jsonProduk = jsonData["VALUE"];
    final PNLDATA pnldata =
          new PNLDATA(
          jsonData['dt_name'] as String,
          jsonData['dt_trs'] as String,
          jsonData['dt_GTag'] as String,
          jsonData['dt_GAd'] as String,
          jsonData["dt_Gsum"] as String); 
// I think this map requires explicit casting. You can check to see if it doesn't work without the casting
      
    print(pnldata);
    return pnldata;
  }

如果你想返回一个列表,你应该保存一个带有列表结构的 json。 像这样的:

{
      "RC": "00",
      "CMD": "PNLContent",
      "VALUES": [
        {
          "dt_status": "SUCCESS",
          "dt_name": "Caramel",
          "dt_trs": "0000000001",
          "dt_GTag": "00002",
          "dt_GAd": "Macchiato",
          "dt_Gsum": "22500",
          "dt_Urs": "22212",
        }
      ],
    };

这样你就可以尝试实现类似于这个的代码。

Future<List<PNLDATA>>_getPNLCONTENT() async {
    var biller = "PNLpre";
    var idPel = ContentPNLController.text;
    var params = ContentPNLNumController.text.replaceAll(".", "");
    var data = await ContentPre(Bill, ID, prm);
    var jsonData = json.decode(data);
    var jsonProduk = jsonData["VALUES"];
    List<PNLDATA> pnldata = [];
    for (var data in jsonProduk) {
      pnldata.add(
          new PNLDATA(
          data['dt_name'] as String, data['dt_trs'] as String, data['dt_GTag'] as String, data['dt_GAd'] as String, data["dt_Gsum"] as String)
      );
    }
    print(pnldata);
    return pnldata;
  }

【讨论】:

  • 我无法返回 pnldata
  • 在 List 情况下还是在单返回示例中?
【解决方案2】:

发生错误是因为您的jsonProdukMap 类型。这意味着您不能使用 for 循环。由于您的回复来自Map 类型,因此您必须将方法更改为以下内容。

Future<PNLDATA> _getPNLCONTENT() async {
  var biller = "PNLpre";
  var idPel = ContentPNLController.text;
  var params = ContentPNLNumController.text.replaceAll(".", "");
  var data = await ContentPre(Bill, ID, prm);
  var jsonData = json.decode(data);
  var jsonProduk = jsonData["VALUE"];

  final PNLDATA pnldata = PNLDATA(
    data['dt_name'],
    data['dt_trs'],
    data['dt_GTag'],
    data['dt_GAd'],
    data["dt_Gsum"],
  );

  print(pnldata);
  return pnldata;
}

【讨论】:

  • 我无法返回,此错误显示Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index'
猜你喜欢
  • 2021-08-01
  • 2020-07-14
  • 2021-09-20
  • 2021-07-21
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多