Flutter错误:异常:类型'int'不是类型'String'的子类型

时间:2020-01-05 22:08:47

标签: android json flutter dart

如何发生?我认为这是在我进行json映射时发生的。它表示异常:类型'int'不是类型'String'的子类型。我尝试使用本地json资产文件,但没有什么不同。请帮助我解决这个问题。

class Product {
  int productId;
  String productName;
  String productPrice;

  Product({this.productId, this.productName, this.productPrice});

  Product.fromProduct(Product p) {
    this.productId = p.productId;
    this.productName = p.productName;
    this.productPrice = p.productPrice;
  }

  factory Product.fromJson(Map<String, dynamic> parsedJson) {
    return Product(
        productId: parsedJson['ID'],
        productName: parsedJson['Name'],
        productPrice: parsedJson['SellPrice']);
  }
}

Future<String> _loadAProductAsset() async {
  var res = await http.get(Uri.encodeFull("http://10.0.2.2:9155/product"));
  return json.encode(json.decode(res.body)["data"]);
}

List<Product> parseProduct(String myJson) {
  final parsed = json.decode(myJson).cast<Map<String, dynamic>>();
  return parsed.map<Product>((json) => Product.fromJson(json)).toList();
}

Future<List<Product>> fetchProduct() async {
  await wait(1);
  String jsonString = await _loadAProductAsset();
  return compute(parseProduct, jsonString);
}

Future wait(int s) {
  return new Future.delayed(Duration(seconds: s), () => {});
}

这是_loadAProductAsset()函数中的json

[
  {
    "ID": 2,
    "CreatedAt": "2020-01-06T03:56:32+07:00",
    "UpdatedAt": "2020-01-06T03:56:32+07:00",
    "DeletedAt": null,
    "Name": "Product A",
    "Category": "0",
    "Stock": "50",
    "StockUnit": "0",
    "BuyPrice": "20000",
    "SellPrice": "21000",
    "SupplierID": "1"
  }
]

3 个答案:

答案 0 :(得分:2)

解决方案1:无需将数据类型显式定义为字符串和整数,而是可以将它们定义为动态变量,如下所示:

dynamic productId;
dynamic productName;
dynamic productPrice;

这里发生的事情是,您有责任谨慎处理投射的任何数据类型。

解决方案2:通过转到浏览器窗口中的链接并查看传入的每组数据的数据类型,检查传入JSON的结构。查看productId的类型是什么。如果声明为“ 12”,则必须为字符串。

结束JSON项目的数据类型后,可以在反序列化JSON并在工厂构造函数中定义变量(在本例中为fromProduct)的同时解析数据。如下所示:

Product.fromProduct(Product p) {
  this.productId = int.parse(p.productId); // takes in a String and converts it into an int.
  this.productName = p.productName;
  this.productPrice = p.productPrice;
}

答案 1 :(得分:1)

您需要将来自JSON的字符串解析为一个int:

Product.fromProduct(Product p) {
  this.productId = int.parse(p.productId);
  this.productName = p.productName;
  this.productPrice = p.productPrice;
}

答案 2 :(得分:0)

由于某种原因,我遇到了这个问题,我早些时候已经做过json.decode(response),但是在做MyModel.fromJson(response)之前我不得不再次做

所以我通常推荐的是

import 'dart:convert';
.
.
.
.
var decodedJson = json.decode(decode);
MyModel model = MyModel.fromJson(decodedJson);

以上对我有用。