(Получение исключения при извлечении данных из JSON) тип ‘(динамический) => Null’ не является подтипом типа ‘(Строка, динамический) =>> пусто’ из ‘f’

#android #json #flutter

Вопрос:

Мы сталкиваемся с этим исключением при извлечении данных из JSON, и мы приложили код, а также формат JSON.

Не уверен, по какой причине я получаю исключение » Необработанное исключение: тип «(динамический) =gt; Null » не является подтипом типа «(строка, динамический) =gt;gt; пусто» из «f»». Кажется, все сделано правильно, но все равно получается исключение

Файл Продукта

 class Product {  int? id;  String? title;  String? image;  int? price;  int? discount;  String? description;  Category? category;  int? finalprice;  bool? favorites;  bool? exclusive;  Product(  {this.id,  this.title,  this.image,  this.price,  this.discount,  this.description,  this.category,  this.finalprice,  this.favorites,  this.exclusive});   Product.fromJson(Maplt;String, dynamicgt; json) {  id = json['id'];  title = json['title'];  image = json['image'];  price = json['price'];  discount = json['discount'];  description = json['description'];  category = json['category'] != null  ? new Category.fromJson(json['category'])  : null;  finalprice = json['finalprice'];  favorites = json['favorites'];  exclusive = json['exclusive'];  }   Maplt;String, dynamicgt; toJson() {  final Maplt;String, dynamicgt; data = new Maplt;String, dynamicgt;();  data['id'] = this.id;  data['title'] = this.title;  data['image'] = this.image;  data['price'] = this.price;  data['discount'] = this.discount;  data['description'] = this.description;  if (this.category != null) {  data['category'] = this.category!.toJson();  }  data['finalprice'] = this.finalprice;  data['favorites'] = this.favorites;  data['exclusive'] = this.exclusive;  return data;  } }  class Category {  int? id;  String? categoryName;   Category({this.id, this.categoryName});   Category.fromJson(Maplt;String, dynamicgt; json) {  id = json['id'];  categoryName = json['category'];  }   Maplt;String, dynamicgt; toJson() {  final Maplt;String, dynamicgt; data = new Maplt;String, dynamicgt;();  data['id'] = this.id;  data['category_name'] = this.categoryName;  return data;  } }  

Структура продукта.файл для дротиков

 class ProductDataStacture with ChangeNotifier {  Listlt;Productgt; _products = [];    Futurelt;boolgt; getProducts() async {  String url = 'https://ecom.techoxy.in';  try {  http.Response response = await http.get(Uri.parse(url   "/home"),  headers: {  'Authorization': 'token a867c3c092e8b1195f398ed5ca52dda4e5ff5ed8'  });  var data = json.decode(response.body);  print(data);  Listlt;Productgt; demo = [];  data.forEach((element) {  Product product = Product.fromJson(element);  demo.add(product);  print(product);  });  _products = demo;  return true; } catch (e) {  print("e getProducts");  print(e);  return true; }    }    Listlt;Productgt; get productsList {  return [..._products];  }  }  

JSON format

 {  "banners": [  {  "name": "Test Banner",  "image": "/media/banners/Diwali-image-1200x600.jpg",  "link": "#",  "first": true  },  {  "name": "Test2",  "image": "/media/banners/Flipkart-Big-Diwali-Sale-2020.jpg",  "link": "#",  "first": true  }  ],  "products": [  {  "id": 3,  "title": "Plain White Shirt",  "image": "https://media.istockphoto.com/photos/mens-shirt-picture-id488160041?k=20amp;m=488160041amp;s=612x612amp;w=0amp;h=OH_-skyES8-aeTvDQHdVDZ6GKLsqp6adFJC8u6O6_UY=",  "description": "xcvipoer erefc",  "price": 2013.54,  "discount": 0.0,  "finalprice": 2013.54,  "exclusive": true,  "favourites": [  {  "id": 1,  "username": "billa",  "photo": null  }  ],  "cart": [],  "category": {  "name": "Shirts",  "category": {  "id": 1,  "name": "Clothing",  "image": null  }  }  }  ],  "categories": [  {  "name": "Clothing",  "image": null  }  ],  "primary": [  {  "name": "Test Banner",  "image": "/media/banners/Diwali-image-1200x600.jpg",  "link": "#",  "first": true  },  {  "name": "Test3",  "image": "/media/banners/Diwali-image-1200x600_nJrJRij.jpg",  "link": "#",  "first": false  }  ],  "secondary": [  {  "name": "Test Banner",  "image": "/media/banners/Diwali-image-1200x600.jpg",  "link": "#",  "first": true  },  {  "name": "Test3",  "image": "/media/banners/Diwali-image-1200x600_nJrJRij.jpg",  "link": "#",  "first": false  }  ],  "dailydeal": [  {  "id": 3,  "title": "Plain White Shirt",  "image": "https://media.istockphoto.com/photos/mens-shirt-picture-id488160041?k=20amp;m=488160041amp;s=612x612amp;w=0amp;h=OH_-skyES8-aeTvDQHdVDZ6GKLsqp6adFJC8u6O6_UY=",  "description": "xcvipoer erefc",  "price": 2013.54,  "discount": 0.0,  "finalprice": 2013.54,  "exclusive": true,  "favourites": [  {  "id": 1,  "username": "billa",  "photo": null  }  ],  "cart": [],  "category": {  "name": "Shirts",  "category": {  "id": 1,  "name": "Clothing",  "image": null  }  }  }  ],  "random": [  {  "id": 1,  "title": "shirt",  "image": "https://minimal-kit-react.vercel.app/static/mock-images/products/product_7.jpg",  "description": "dfmkdgfdkmgnfdgn",  "price": 521463.02,  "discount": 0.0,  "finalprice": 521463.02,  "exclusive": false,  "favourites": [],  "cart": [],  "category": {  "name": "Footwear",  "category": {  "id": 1,  "name": "Clothing",  "image": null  }  }  },  {  "id": 2,  "title": "tshirt",  "image": "https://minimal-kit-react.vercel.app/static/mock-images/products/product_2.jpg",  "description": "fdg aodkrorf sedfmsdkg",  "price": 6589.46,  "discount": 0.0,  "finalprice": 6589.46,  "exclusive": false,  "favourites": [  {  "id": 1,  "username": "billa",  "photo": null  }  ],  "cart": [  {  "id": 7,  "quantity": 2,  "total": 13178.92,  "active": false,  "user": {  "id": 1,  "password": "pbkdf2_sha256$260000$GUUdFMt9N0G2itKiCNPCu1$05cKKGxS969qAIvxbziYsQl/f9uMk0Vqd9FXeUBRs6A=",  "username": "billa",  "email": "billa@gmail.com",  "name": null,  "date_joined": "2021-11-15T14:43:11.457711Z",  "last_login": "2021-11-24T16:29:33.919578Z",  "is_staff": true,  "is_superuser": true,  "type": "S",  "photo": null,  "contact": null,  "address": [  1,  2  ]  },  "product": {  "id": 2,  "title": "tshirt",  "poster": null,  "image": "https://minimal-kit-react.vercel.app/static/mock-images/products/product_2.jpg",  "size": null,  "description": "fdg aodkrorf sedfmsdkg",  "quantity": null,  "quantityunit": null,  "stockuntil": null,  "price": 6589.46,  "discount": 0.0,  "gst": 0.0,  "taxamount": 0.0,  "finalprice": 6589.46,  "averagerating": 3.2,  "added": "2021-11-15T14:46:26.137948Z",  "edited": "2021-11-17T08:04:57.949012Z",  "exclusive": false,  "dailydeal": false,  "category": 1,  "favourites": [  1  ],  "cart": [  7  ]  }  }  ],  "category": {  "name": "Footwear",  "category": {  "id": 1,  "name": "Clothing",  "image": null  }  }  },  {  "id": 3,  "title": "Plain White Shirt",  "image": "https://media.istockphoto.com/photos/mens-shirt-picture-id488160041?k=20amp;m=488160041amp;s=612x612amp;w=0amp;h=OH_-skyES8-aeTvDQHdVDZ6GKLsqp6adFJC8u6O6_UY=",  "description": "xcvipoer erefc",  "price": 2013.54,  "discount": 0.0,  "finalprice": 2013.54,  "exclusive": true,  "favourites": [  {  "id": 1,  "username": "billa",  "photo": null  }  ],  "cart": [],  "category": {  "name": "Shirts",  "category": {  "id": 1,  "name": "Clothing",  "image": null  }  }  }  ] }  

Обновленный код: Это обновленный код

 try {  http.Response response = await http.get(Uri.parse(url   "/home"),  headers: {  'Authorization': 'token a867c3c092e8b1195f398ed5ca52dda4e5ff5ed8'  });  var data = json.decode(response.body);  print(data);  Listlt;Productgt; demo = [];  data['products'].forEach((element) {  Product product = Product.fromJson(element);  demo.add(product);  print(product);  });  _products = demo;  return true;  } catch (e) {  print("e getProducts");  print(e);  return true;  }  

Вывод на консоль:

 The Flutter DevTools debugger and profiler on sdk gphone x86 is available at: http://127.0.0.1:9102?uri=http://127.0.0.1:55482/rQGykIbE6KQ=/ I/flutter ( 8707): e getProducts I/flutter ( 8707): SocketException: Failed host lookup: 'ecom.techoxy.in' (OS Error: No address associated with hostname, errno = 7)  

Комментарии:

1. в какой строке вы получаете эту ошибку ??

2. Он генерирует исключение из файла структуры данных продукта в блоке catch. Я новичок в этом, если возможно, любезно помогите мне решить эту проблему.

3. Исключение SocketException, которое вы получаете, связано с сетевыми проблемами. Проверьте, можете ли вы по-прежнему вызывать API вручную (через клиентский инструмент http, такой как curl, postman и т. Д.), И что устройство, на котором вы запускаете это, подключено к Интернету

4. Теперь он дает этот «тип» _InternalLinkedHashMaplt;Строка, динамическаяgt;» не является подтипом типа «Категория»?»

Ответ №1:

Ваш ответ json-это объект, а не массив. Разбор его на объекты продукта с data.forEach((element) ... помощью не будет работать. Может быть, вы хотите только разобрать data['products'] здесь вместо этого?

Если это так, вы можете использовать data['products'].forEach(...) , и он больше не будет выдавать эту ошибку, но у вас есть некоторые другие вещи, которые не являются правильными.

  • Значения для price , discount и finalprice должны быть double вместо int .
  • favorites представляет собой список какого-либо объекта, но определяется как bool
  • имя категории имеет 3 разных ключа для toJson , fromJson и в фактическом json

Комментарии:

1. Я добавил обновленный код, но он вызывает исключение, я добавил правку в свой вопрос