【问题标题】:Unexpected error while parsing JsonData in flutter在颤振中解析 JsonData 时出现意外错误
【发布时间】:2020-03-23 15:57:02
【问题描述】:

我正在尝试解析json 列表数据,以便我可以保存到一个对象中。但是每次都报错,不知道为什么。

Json 数据

{
    "status": "success",
    "data": [
        {
            "distro_name": "Ikeja Electric (IKEDC)",
            "service_id": "ikeja-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Eko Electric (EKEDC)",
            "service_id": "eko-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Ibadan Electric (IBEDC)",
            "service_id": "ibadan-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Kano Electric (KEDCO)",
            "service_id": "kano-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Jos Electricity Distribution (JED)",
            "service_id": "jos-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Port-Harcourt Electric (PHED)",
            "service_id": "portharcourt-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        }
    ]
}

这是我的数据模型类。

型号

class Providers {
  String distro_name;
  String service_id;
  dynamic type;

  Providers(this.distro_name, this.service_id, this.type);


  Providers.fromJson(Map<String, dynamic> json):
        distro_name = json['distro_name'],
        service_id = json['service_id'],
        type = json['type'];

}

Main.dart

fetchProviders() async{
    try {
      final response = await http.get(
        uri,
        headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
      );
      final responseJson = json.decode(response.body);
      for (var u in responseJson["data"]) {
       Providers provider = Providers(
            u["distro_name"],
            u["service_id"],
             u["list"]);
      providerList.add(provider);
      }
      return responseJson;
    } catch (exception) {
      print(exception);
    }
  }

这是我得到的错误。

 NoSuchMethodError: The method 'add' was called on null.
I/flutter ( 1366): Receiver: null

我真的不知道为什么会出现此错误。我的 api 上没有 null 值,而且我过去使用过这种 json 结构。

【问题讨论】:

  • providerList 是否为空?

标签: json flutter dart get


【解决方案1】:

初始化providerList:

var providerList = </* type */>[]
      for (var u in responseJson["data"]) {
       Providers provider = Providers(
            u["distro_name"],
            u["service_id"],
             u["list"]);
      providerList.add(provider);
      }

使用列表映射:

providerList = responseJson["data"].map((u) => Providers(
                 u["distro_name"],
                 u["service_id"],
                 u["list"],
               )).cast<String>().toList();

【讨论】:

  • 我在初始化状态下初始化它?
  • 我现在得到错误:类型“MappedListIterable”不是类型“List”的子类型
  • 如何从 providerLists 中获取我的变量列表?
  • 比如分别获取 bistro_names、service_ids 和列表的列表
  • 是的。例如,List service_ids
【解决方案2】:

型号

class Providers {
  String distro_name;
  String service_id;
  dynamic type;

  Providers(this.distro_name, this.service_id, this.type);

  Providers.fromJson(Map<String, dynamic> json) => Providers(
    json['distro_name'],
    json['service_id'],
    json['type'],
 );

}

Main.dart

fetchProviders() async{
    try {
      final response = await http.get(
        uri,
        headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
      );
      final responseJson = json.decode(response.body);
      responseJson.forEach((data){
       Providers provider = Providers.fromJson(data);
       providerList.add(provider);
     return responseJson;
    });
    } catch (exception) {
      print(exception);
    }
  }

【讨论】:

    【解决方案3】:

    型号

           class Providers {
            String distro_name;
            String service_id;
           dynamic type;
    
     Providers(this.distro_name, this.service_id, this.type);
    
    
     factory Providers.fromJson(Map<String, dynamic> json){
    
        return Providers(
           distro_name = json['distro_name'],
           service_id = json['service_id'],
            type = json['type'],
         );
         }
         }
    

    ma​​in.dart

    fetchProviders() async{
    try {
      final response = await http.get(
        uri,
        headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
      );
      final responseJson = json.decode(response.body);
      for (var u in responseJson['data']) {
       Providers provider = Providers.fromJson(u);
       providerList.add(provider);
     return responseJson;
         }
      } 
      catch (exception) {
      print(exception);
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多