嗨我试图从JSOn获取值,但当我映射一个INT值,然后flutter显示错误,没有返回数据:
flutter: type 'String' is not a subtype of type 'int'
这是我的模特:
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
class Kits {
final String country;
final String franchise;
final String type;
String brand;
String procedure;
String setdesc;
int traymaterialid;
String traydesc;
int referencia;
String descart;
int cantidad;
int homologado;
int bajopresu;
DateTime insdate;
Kits(this.country,this.franchise,this.type, this.brand, this.procedure,this.traydesc, this.traymaterialid);
factory Kits.fromJson(Map<String, dynamic> json) {
return Kits(json['COUNTRY'], json['FRANCHISE'], json['TYPE'], json['BRAND'], json['PROCEDURE'], json['TRAYDESCRIPTION'], json['TRAYMATERIALID'] /* <-- INT*/ );
}
}
class KitsData {
static const url = 'http://app-smith.com/en/[email protected]&macid=888&passwd=Wcz95f4UGkax5G';
final JsonDecoder _decoder = new JsonDecoder();
Future<List<Kits>> fetch(){
return http.get(url).then((http.Response response){
final String jsonBody = response.body;
//final statusCode = response.statusCode;
/*if (statusCode < 200 || statusCode >= 300 || jsonBody == null){
return List();
}*/
final kitsContainer = _decoder.convert(jsonBody);
final List kitsItems = kitsContainer['kits'];
return kitsItems.map( (kitsRaw) => new Kits.fromJson(kitsRaw) ).toList();
});
}
}
class FetchDataException implements Exception {
String _message;
FetchDataException(this._message);
String toString() {
return "Exception: $_message";
}
}
我不明白为什么会发生因为fromJson只获得了我传递密钥的值,然后在我的列表中我转换为String的值。
JSON的片段:
{"kits": [{"COUNTRY":"FR","FRANCHISE":"KNEE","TYPE":"LEGION","BRAND":"REVISION","PROCEDURE":"LEGION REVISION","SETDESCRIPTION":"LEGION REVISION - INSTRUMENTS","TRAYMATERIALID":"551820141LRC","TRAYDESCRIPTION":"INSTR LEGION REVISION","REFERENCIA":"71431722","DESCRIPCIONARTICULO":"LGN SCW LWDG TRL S3 5D X 10P","CANTIDAD":"1","HOMOLOGADO":"","BAJOPRESUPUESTO":"","INS_DATE":"2018-08-23 18:57:04"}
所有数值都在引号内,因此它们不会作为int
传输,而是作为String
传输。错误消息是正确的。如果你想要它们作为String
要么确保没有引用值,如果你不控制使用int.parse()
将它们从String
转换为int