简体   繁体   English

Dart 未处理的异常:类型 &#39;_InternalLinkedHashMap<String, dynamic> &#39; 不是 &#39;Iterable 类型的子类型<dynamic>

[英]Dart Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>

How can fix the issue Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable' i am trying to parse data from a json Api in Android Studio flutter (dart) but i keep getting the error above, the app open fine but displays nothing and i get the error in my logcat.如何解决未处理的异常:类型“_InternalLinkedHashMap<String, dynamic>”不是“Iterable”类型的子类型我正在尝试从 Android Studio flutter (dart) 中的 json Api 解析数据,但我不断收到上述错误,应用程序打开正常但什么也没显示,我的 logcat 中出现错误。 Any suggestion will be greatly appreciated.任何建议将不胜感激。

//Sample Json//
{
  "data": [
    {
      "title": "Ronix",
      "year": "Year 5",
      "category": "Admin"
    },
    {
      "title": "Ultra",
      "year": "Year 11",
      "category": "Tutor"
    },
    {
      "title": "Sonet",
      "year": "Year 3",
      "category": "Admin"
    }
  ]
}

Here is my class .dart file这是我的班级 .dart 文件

class DataClass{
  String title ="";
  String year="";
  String category="";

  DataClass(this.title, this.year, this.category);

  DataClass.fromJson(Map<String, dynamic> json){
    title = json["title"];
    year = json["year"];
    category = json["category"];
  }
}

And my main .dart file还有我的主要 .dart 文件

class CreateState1 extends State<JsonData1>{
  List<DataClass> _dataClass = [];

  Future<List<DataClass>> getMovieData() async {
    var response = await http.get(Uri.parse("myjsonApiUrl"));
    var datas = [];
    if(response.statusCode == 200){
      var datasJson = json.decode(response.body);
      for(var dataJson in datasJson){
        datas.add(DataClass.fromJson(dataJson));
      }
    }
    return _dataClass;
  }
  @override
  Widget build(BuildContext context) {
    getMovieData().then((value) {
      setState(() {
        _dataClass.addAll(value);
      });
    });

    return Scaffold(
      backgroundColor: Colors.cyan,
      body: ListView.builder(
          itemBuilder: (context, index) {
            return Card(
                child: Column(
                  children: <Widget>[
                    Text(_dataClass[index].title),
                    Text( _dataClass[index].year),
                    Text(_dataClass[index].category),
                  ],
              ),
            );
          },
          itemCount: _dataClass.length,
       ),
    );
  }
}

as @hacker1024 said , you are missing key there.正如@hacker1024 所说,你在那里缺少钥匙。

if you are getting data from Api, try using FutureBuilder.如果您从 Api 获取数据,请尝试使用 FutureBuilder。

I'm loading from assets folder here (dont forget to add on pubspec.yaml )我正在从这里的资产文件夹加载(不要忘记添加pubspec.yaml

Future<List<DataClass>> getMovieData() async {
    final myJson = await rootBundle.loadString("assets/j.json");
    // var response = await http.get(Uri.parse(myJson));

    // if (response.statusCode == 200) {
    final datasJson = json.decode(myJson)["data"] as List;

    return datasJson.map((js) => DataClass.fromJson(js)).toList();
    // } else
    //   print("http error");
    // return [];
  }

And for implementation并为实施

@override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.cyan,
      body: FutureBuilder<List<DataClass>>(
          future: getMovieData(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting)
              return CircularProgressIndicator();

            if (snapshot.hasError)
              return Text(snapshot.error.toString());
            else if (snapshot.hasData &&
                snapshot.connectionState == ConnectionState.done)
              return ListView.builder(
                itemBuilder: (context, index) {
                  return Card(
                    child: Column(
                      children: <Widget>[
                        Text(snapshot.data![index].title),
                        Text(snapshot.data![index].year),
                        Text(snapshot.data![index].category),
                      ],
                    ),
                  );
                },
                itemCount: snapshot.data!.length,
              );
            else
              return Text("impliment more");
          }),
    );
  }

In your example, datasJson is a map with a " data " key.在您的示例中, datasJson是一个带有“ data ”键的地图。 You want to iterate over the list assigned to the " data " key:您想遍历分配给“ data ”键的列表:

var datasJson = json.decode(response.body)['data'];

instead of代替

for(var dataJson in datasJson){
        datas.add(DataClass.fromJson(dataJson));
}

use this用这个

for (var dataJson in datasJson['data']) {
    datas.add(DataClass.fromJson(dataJson));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 dart 中解析对象(未处理的异常:类型 &#39;_InternalLinkedHashMap<dynamic, dynamic> &#39; 不是类型 &#39;Map 的子类型<String, dynamic> &#39;) - Parsing object in dart (Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>') 嵌套对象 - 未处理的异常:类型 &#39;_InternalLinkedHashMap<String, dynamic> &#39; 不是 &#39;Iterable 类型的子类型<dynamic> - Nested Object - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic> 未处理的异常:类型 '_InternalLinkedHashMap<string, dynamic> ' 不是 'HashMap 类型的子类型<string, dynamic> ' Dart</string,></string,> - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'HashMap<String, dynamic>' Dart 未处理的异常:类型 '_InternalLinkedHashMap<string, dynamic> ' 不是类型 'String' 的子类型</string,> - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' Dio.get - 未处理的异常:类型 '_InternalLinkedHashMap<string, dynamic> ' 不是 Flutter/Dart 中 'String' 类型的子类型</string,> - Dio.get - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' in Flutter/Dart Flutter dart json 未处理的异常:InternalLinkedHashMap<string, dynamic> ' 不是类型 'List 的子类型<dynamic></dynamic></string,> - Flutter dart json Unhandled Exception: InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic> 未处理的异常:InternalLinkedHashMap<string, dynamic> ' 不是类型 'List 的子类型<dynamic></dynamic></string,> - Unhandled Exception: InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic> 未处理的异常:类型 '_InternalLinkedHashMap<string, dynamic> ' 不是类型 'Response' 的子类型</string,> - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Response' _TypeError(类型'_InternalLinkedHashMap<string, dynamic> ' 不是类型 'Iterable 的子类型<dynamic> ') Flutter</dynamic></string,> - _TypeError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>') Flutter “_InternalLinkedHashMap <String, dynamic> &#39;不是&#39;Iterable&#39;类型的子类型 <dynamic> &#39;在类型演员 - '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' in type cast
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM