Необработанное исключение: DioError [DioErrorType.DEFAULT]: преобразование объекта в кодируемый объект не выполнено - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть объект, который я хочу отправить в API через DIO, когда я пытаюсь это сделать, я получаю необработанное исключение: DioError [DioErrorType.DEFAULT]: преобразование объекта в кодируемый объект не выполнено. Я также попытался преобразовать объект в Json, но я все еще получаю другую ошибку, о которой я упомяну ниже.

  static Future<DiagnosisModel> doDiagnosis(String url, String id,String choiceId, bool initial) async{
Dio dio = new Dio();
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers['App-Id'] = ChatBotApi.applicationId;
dio.options.headers['App-Key'] = ChatBotApi.applicationKey;
Response response;

DiagnosisSendingModel diagnosisSendingModel;
Evidence evidence;

if(initial){
  evidence = Evidence();
  diagnosisSendingModel = DiagnosisSendingModel();
  diagnosisSendingModel.evidence = List<Evidence>();
  evidence.id = id;
  evidence.initial = initial;


  diagnosisSendingModel.sex = "male";
  diagnosisSendingModel.age = 23;
  diagnosisSendingModel.evidence.add(evidence);


  response = await dio.post(
      url,
      data: diagnosisSendingModel
  );
}else{
  evidence = Evidence();
  diagnosisSendingModel = DiagnosisSendingModel();
  evidence.id = id;
  if(choiceId == "present"){
    evidence.choiceId = ChoiceId.PRESENT;
  }else{
    evidence.choiceId = ChoiceId.ABSENT;
  }

  diagnosisSendingModel.sex = "male";
  diagnosisSendingModel.age = 23;
  diagnosisSendingModel.evidence.add(evidence);

  response = await dio.post(
      url,
      data: diagnosisSendingModel
  );
}


DiagnosisModel diagnosisModel;
if(response.statusCode == 200){
  diagnosisModel = DiagnosisModel.fromJson(response.data);
  print(diagnosisModel);
}else{
  throw("Error ${response.statusCode}");
}

return diagnosisModel;
}

Я также пытался преобразовать в json, и все еще получаю ошибку

Unhandled Exception: Converting object to an encodable object failed: Instance of 'DiagnosisSendingModel'

Код для этого ниже

  static Future<DiagnosisModel> doDiagnosis(String url, String id,String choiceId, bool initial) async{
Dio dio = new Dio();
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers['App-Id'] = ChatBotApi.applicationId;
dio.options.headers['App-Key'] = ChatBotApi.applicationKey;
Response response;

DiagnosisSendingModel diagnosisSendingModel;
Evidence evidence;

if(initial){
  evidence = Evidence();
  diagnosisSendingModel = DiagnosisSendingModel();
  diagnosisSendingModel.evidence = List<Evidence>();
  evidence.id = id;
  evidence.initial = initial;


  diagnosisSendingModel.sex = "male";
  diagnosisSendingModel.age = 23;
  diagnosisSendingModel.evidence.add(evidence);

var jsonVar = json.encode(diagnosisSendingModel);
  response = await dio.post(
      url,
      data: jsonVar
  );
}else{
  evidence = Evidence();
  diagnosisSendingModel = DiagnosisSendingModel();
  evidence.id = id;
  if(choiceId == "present"){
    evidence.choiceId = ChoiceId.PRESENT;
  }else{
    evidence.choiceId = ChoiceId.ABSENT;
  }

  diagnosisSendingModel.sex = "male";
  diagnosisSendingModel.age = 23;
  diagnosisSendingModel.evidence.add(evidence);
  var jsonVar = json.encode(diagnosisSendingModel);
  response = await dio.post(
      url,
      data: jsonVar
  );
}


DiagnosisModel diagnosisModel;
if(response.statusCode == 200){
  diagnosisModel = DiagnosisModel.fromJson(response.data);
  print(diagnosisModel);
}else{
  throw("Error ${response.statusCode}");
}

return diagnosisModel;
}

Ниже мой модель

  String sex;
  int age;
  List<Evidence> evidence;
  ExtrasSending extras;

  DiagnosisSendingModel({
    this.sex,
    this.age,
    this.evidence,
    this.extras,
  });

  factory DiagnosisSendingModel.fromJson(Map<String, dynamic> json) => DiagnosisSendingModel(
    sex: json["sex"],
    age: json["age"],
    evidence: List<Evidence>.from(json["evidence"].map((x) => Evidence.fromJson(x))),
    extras: ExtrasSending.fromJson(json["extras"]),
  );

  Map<String, dynamic> toJson() => {
    "sex": sex,
    "age": age,
    "evidence": List<dynamic>.from(evidence.map((x) => x.toJson())),
    "extras": extras.toJson(),
  };
}

class Evidence {
  String id;
  ChoiceId choiceId;
  bool initial;

  Evidence({
    this.id,
    this.choiceId,
    this.initial,
  });

  factory Evidence.fromJson(Map<String, dynamic> json) => Evidence(
    id: json["id"],
    choiceId: choiceIdValues.map[json["choice_id"]],
    initial: json["initial"] == null ? null : json["initial"],
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "choice_id": choiceIdValues.reverse[choiceId],
    "initial": initial == null ? null : initial,
  };
}

enum ChoiceId { PRESENT, ABSENT }

final choiceIdValues = EnumValues({
  "absent": ChoiceId.ABSENT,
  "present": ChoiceId.PRESENT
});

class ExtrasSending {
  bool enableTriage5;

  ExtrasSending({
    this.enableTriage5,
  });

  factory ExtrasSending.fromJson(Map<String, dynamic> json) => ExtrasSending(
    enableTriage5: json["enable_triage_5"],
  );

  Map<String, dynamic> toJson() => {
    "enable_triage_5": enableTriage5,
  };
}

class EnumValues<T> {
  Map<String, T> map;
  Map<T, String> reverseMap;

  EnumValues(this.map);

  Map<T, String> get reverse {
    if (reverseMap == null) {
      reverseMap = map.map((k, v) => new MapEntry(v, k));
    }
    return reverseMap;
  }
} ```

1 Ответ

0 голосов
/ 06 апреля 2020

заменить:

var jsonVar = json.encode(diagnosisSendingModel);

на это:

var jsonVar = json.encode(diagnosisSendingModel.toJson());
...