繁体   English   中英

未处理的异常:将 object 转换为可编码的 object 失败:“测量”实例

[英]Unhandled Exception: Converting object to an encodable object failed: Instance of 'Mesure'

你好,我有 class 测量,当我读取数据时,我使用它作为 model 然后我将它保存在我的数据库getstorage getX中。 它工作得很好,但是当我添加这个测试 if mode = display 我将在我的 model 上添加更多数据并进行映射。 我收到这个错误。 如果它不可用,是否可以跳过“debut”和“fin”?

未处理的异常:将 object 转换为可编码的 object 失败:“Mesure”实例如何修复它

class Mesure {
  late int id;
  String status;
  late String mode;
  late String equipementNumero;
  late String temperature;
  late String courant = "";
  late String debut;
  late String fin = "";

  Mesure.init(List<String> values, this.id, this.status) {
    mode = values[0];
    equipementNumero = values[1];
    temperature = values[2];
    courant = values[3];

    if (mode == "display") {
      debut = values[4];
      fin = values[5];
    }
  }

  Mesure.fromJson(Map<String, dynamic> json)
      : id = json['id'],
        status = json['status'],
        mode = json['mode'],
        temperature = json['temperature'],
        equipementNumero = json['equipementNumero'],
        courant = json['courant'],
        debut = json['debut'],
        fin = json['fin'];

  Map<String, dynamic> toJson() {
    if (mode == "display") {
      return {
        'id': id,
        'status': status,
        'mode': mode,
        'temperature': temperature,
        'equipementNumero': equipementNumero,
        'courant': courant,
      };
    } else {
      return {
        'id': id,
        'status': status,
        'mode': mode,
        'temperature': temperature,
        'equipementNumero': equipementNumero,
        'courant': courant,
        'debut': debut,
        'fin': fin,
      };
    }
  }
}

有两件事:

  1. 您必须初始化debut以使其写入 JSON ( get_storage );
  2. 并且,从 JSON (get_storage) 读取时,您必须将debutfin的值默认为某个值;

所以,整个 class Mesure看起来像这样:


class Mesure {
  late int id;
  String status;
  late String mode;
  late String equipementNumero;
  late String temperature;
  late String courant;
  late String debut = "";
  late String fin = "";

  Mesure.init(List<String> values, this.id, this.status) {
    mode = values[0];
    equipementNumero = values[1];
    temperature = values[2];
    courant = values[3];

    if (mode == "display") {
      debut = values[4];
      fin = values[5];
    }
  }

  Mesure.fromJson(Map<String, dynamic> json)
      : id = json['id'],
        status = json['status'],
        mode = json['mode'],
        temperature = json['temperature'],
        equipementNumero = json['equipementNumero'],
        courant = json['courant'],
        debut = json['debut'] ?? '',
        fin = json['fin'] ?? '';

  Map<String, dynamic> toJson() {
    if (mode == "display") {
      return {
        'id': id,
        'status': status,
        'mode': mode,
        'temperature': temperature,
        'equipementNumero': equipementNumero,
        'courant': courant,
      };
    } else {
      return {
        'id': id,
        'status': status,
        'mode': mode,
        'temperature': temperature,
        'equipementNumero': equipementNumero,
        'courant': courant,
        'debut': debut,
        'fin': fin,
      };
    }
  }
}

此外,构造函数中的代码在toJson中看起来是倒置的。 在构造函数中不应该像这样mode = "display"而不是mode == "display"

  Mesure.init(List<String> values, this.id, this.status) {
    mode = values[0];
    equipementNumero = values[1];
    temperature = values[2];
    courant = values[3];

    if (mode != "display") {
      debut = values[4];
      fin = values[5];
    }
  }

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM