当前位置: 首页 > 知识库问答 >
问题:

获取问题:“\u InternalLinkedHashMap”不是“List”类型的子类型

葛宪
2023-03-14

我试图从API中获取数据,但一直出现此错误。

获取时出现问题:'\u InternalLinkedHashMap

请告诉我如何修复此代码。

模型飞奔

class ComprovanteModel {
  ComprovantesInfoModel jsonResponse;

  String error;

  ComprovanteModel({this.jsonResponse, this.error});

  ComprovanteModel.fromJson(Map<String, dynamic> json)
      : jsonResponse = ComprovantesInfoModel.fromJson(json['json_response']),
        error = '';

  ComprovanteModel.withError(String errorValue)
      : jsonResponse = null,
        error = errorValue;
}

class ComprovanteInfoModel {
  String clientFormalName;
  int volumes;
  int duration;
  CheckpointsModel checkpoint;

  ComprovanteInfoModel({
    this.clientFormalName,
    this.duration,
    this.volumes,
    this.checkpoint,
  });

  ComprovanteInfoModel.fromJson(Map<String, dynamic> json)
      : clientFormalName = json['client_formal_name'],
        checkpoint = CheckpointsModel.fromJson(json['checkpoint']),
        volumes = json['volumes'],
        duration = json['duration'];
}

class CheckpointModel {
  int checkpointId;
  String arrivalTime;
  int status;

  CheckpointModel({
    this.checkpointId,
    this.arrivalTime,
    this.status,
  });

  CheckpointModel.fromJson(Map<String, dynamic> json)
      : checkpointId = json['checkpoint_id'],
        arrivalTime = json['arrival_time'],
        status = json['status'];
}

class CheckpointsModel {
  List<CheckpointModel> checkpoint;

  CheckpointsModel({this.checkpoint});

  CheckpointsModel.fromJson(List<dynamic> jsonList)
      : checkpoint = jsonList.map((e) => CheckpointModel.fromJson(e)).toList();
}

API响应:

{
  "json_response": [
    {
      "client_formal_name": "",
      "deadline": null,
      "volumes": 1,
      "duration": 5,
      "depot_id": 20,
      "service_id": 109856,
      "georef_provider": "ap_geocoder",
      "checkpoint": {
        "checkpoint_id":,
        "arrival_time": "",
        "duration":,
        "status": 1,
        "event_id": 5,
        "resources": [
          {
            "content_type": "PHOTO",
            "service_event_effect_id": 58,
            "content": "em+ndG6XtE2unp",
            "content_label": "",
            "user_effect_unique_code": ""
          },
          {
            "content_type": "RECEPTOR_INFO",
            "service_event_effect_id": 61,
            "content": "{\"user_relationship_unique_code\":\"\",\"is_expected_receiver\":\"true\",\"document\":\"65979973000240\",\"name\":\"",\"description\":\"",\"id\":\"1\"}",
            "content_label": "",
            "user_effect_unique_code": "2"
          }
        ],
        "event_description": "",
        "operation_date": "",
        "obs": "",
        "is_assistant": false,
        "image": "{\"description\": \"Documento\", \"photo\": \""}"
      },
      "final_attendance_window_b": null
    }
  ]
}

我想访问检查点项目,然后访问资源项目(我认为这与检查点的过程相同)。我正在使用列表,但我认为是不正确的,我应该使用地图,但我不知道如何使用。请给我指条路。

共有1个答案

冯新知
2023-03-14

>

ComprovanteModel.fromJson(Map<String, dynamic> json)
    : jsonResponse = ComprovantesInfoModel.fromJson(json['json_response']),
      error = '';

对此:

 ComprovanteModel.fromJson(Map<String, dynamic> json)
      : jsonResponse = ComprovantesInfoModel.fromJson(json['json_response'][0]), //added [0] here.
        error = '';
  • 如果仔细查看您的响应,它确实有您需要的映射,但此映射实际上位于列表中,请注意“json\u response”中{}周围的方括号[]:[

您需要访问的地图位于此列表的索引[0]处,然后一切都会正常运行。

第二件事是:

 CheckpointsModel.fromJson(List<dynamic> jsonList)
      : checkpoint = jsonList.map((e) => CheckpointModel.fromJson(e)).toList();
}

>

  • 你告诉Flutter你将传递一个类型为List的对象

    来回答你的最后一个问题

    我想访问检查点项,然后访问资源项(我认为这与检查点的过程相同)。

    "资源":[确实是一个地图列表。在你的代码中,你没有发布你的资源模型,但是我假设你想要一个List

    class SingleResourceModel {
       String contentType;
       int serviceId;
       String content;
       String contentLabel;
       String uniqueCode;
    
      SingleResourceModel({
        this.contentType,
        this.serviceId,
        this.content,
        this.contentLabel,
        this.uniqueCode
      });
    
      SingleResourceModel.fromJson(Map<String, dynamic> json)
          : contentType = json['content_type'],
            serviceId = json['service_event_effect_id'],
            content = json['content'];
            contentLabel = json['content_label'],
            uniqueCode = json['user_effect_unique_code'];
    }
    class ListResourceModel {
      List<SingleResourceModel> resourcesList;
    
      ListResourceModel({this.resourcesList});
    
      ListResourceModel.fromJson(List<Map<String, dynamic>> jsonList)
          : resourcesList = jsonList.map((e) => SingleResourceModel.fromJson(e)).toList();
    }
    

    最后,您可以修改您的检查点模型,并向其添加一个列表资源模型,最终如下所示:

    class CheckpointModel {
      int checkpointId;
      String arrivalTime;
      int status;
      ListResourceModel resourcesList;
    
      CheckpointModel({
        this.checkpointId,
        this.arrivalTime,
        this.status,
        this.resourcesList
      });
    
      CheckpointModel.fromJson(Map<String, dynamic> json)
          : checkpointId = json['checkpoint_id'],
            arrivalTime = json['arrival_time'],
            status = json['status'],
            resourcesList= json['resources'];    
       }
    

    现在,你应该都准备好了。

  •  类似资料:
    • 我正在解码一个响应体,我得到了错误: 我正在解析JSON对象的JSON数组,其中一个字段也是对象列表,我怀疑我的问题源于此。我也在使用json_serializable库。下面是我的代码,我省略了一些字段,更改了一些变量名称,但它代表相同的代码: 从。json_serializable生成的g dart文件(将编码部分复制): 这是我未来的职能:

    • 我从Firestore示例中复制了一段代码: 但是我得到了这个错误 这里出了什么问题?

    • 我相信你知道上面的问题。我想知道我怎样才能解决它。我知道我的数据是列表形式的,但在我使用的数据类map中。我真的不明白我应该如何改变它的工作,基本上我只是跟随颤振。开发文档 如果你想知道我做了什么 我基本上是用json_serializable解析数据的。在使用测试数据进行的测试中,所有测试都运行良好。 我的数据: 我的模型包含一个标题,图像 ` 我正在使用以下代码使用数据: 我希望我写得清楚 -

    • 我是一个新手,我尝试运行一个GitHub项目,但遇到了一个错误,比如类型ListDynamic不是类型ListInt的子类型。Github链接 误差线 以上代码文件 如有任何帮助,我们将不胜感激,并提前向您表示感谢。

    • 我正在开发一个依靠API REST调用的flutter应用程序。来自API的响应有点复杂。当调用我的API(例如:api/产品)时,我可以从日志中看到响应:但是我有这个错误: 类型列表 StackTrace: [更新]:退货产品响应。fromJson(response)而不是response ProductsRespository: ProductsBloc: 回应: ApiProvider: 模

    • 我是个新手。当我运行代码时,我得到一个错误:“Future”类型不是“List”类型的子类型。如果我改变屏幕,我将得到错误:NoSuchMethodError:方法“map”被调用为null。我怎样才能解决它?谢谢你帮助我。