无法从API提取ID数据。如何解决?

我想通过检索产品的ID并访问其ID来加载产品的详细信息以获取所需的详细信息,但是我一直收到我不太理解的错误?

这是我的提供商数据:

class AddCar {
  int id;
  String name;
  String city;
  String country;
  String currencyT;
  double price;
  String date;
  int sponsnum;
  String category;
  String company;
  String model;
  String year;
  String engine;
  double distanceCovered;
  String transmission;
  String oilT;
  String outColor;
  String inColor;
  String description;
  File image;
  PlaceLocation location;
  bool isFavorite;

  AddCar({
    this.id,this.name,this.city,this.country,this.currencyT,this.price,this.date,this.sponsnum,this.category,this.company,this.model,this.year,this.engine,this.distanceCovered,this.transmission,this.oilT,this.outColor,this.inColor,this.description,this.image,this.location,this.isFavorite = false,});
}

class PlaceLocation {
  final double latitude;
  final double longitude;
  final String address;

  const PlaceLocation({
    this.address,this.latitude,this.longitude,});
}

这是我如何获取数据的方式(我有一个指向客户ID的链接,我单击该链接即可转到该产品):

Future<void> fetchAndSetCarDetails() async {
    const url = 'customLink/Detail?Id=204';

    final response = await http.get(url);
    final extractedData = json.decode(response.body) as Map<String,dynamic>;
    List<AddCar> loadedCars = [];

    extractedData.forEach((carId,carData) {
      loadedCars.add(AddCar(
        id: int.parse(carId),name: carData['adTitle'],sponsnum: carData['adNumber'],price: carData['adPrice'],date: carData['adDate'],model: carData['brandmodel'],year: carData['modelYear'],distanceCovered: carData['kilometer'],transmission: carData['gearType'],oilT: carData['fuelType'],location: carData['adLocation'][PlaceLocation(
          address: carData['adAddress'],latitude: carData['lath'],longitude: carData['lang'],)],description: carData['adDetails'],country: carData['country'],city: carData['cityName'],category: carData['category'],company: carData['brand'],engine: carData['cylinder'],outColor: carData['exteriorColor'],inColor: carData['interiorColor'],));
    });
    _cars = loadedCars;
    print(response.body);
    notifyListeners();
  }

这是我得到的打印数据:

I/flutter (13626): {"id":204,"adTitle":null,"adDate":"2019-11-07T11:52:40.0156875","adPrice":25.0,"adNumber":195,"adAddress":"AdAddressssssss","adLocation":{"lath":"40.959028921030104","lang":" 30.992774628906318"},"adDetails":null,"country":227,"cityName":"Stockholm","category":"car child 1","categoryId":7,"brand":"mercedes","brandId":1,"brandmodelId":6,"brandmodel":"M300","cylinder":"6C","kilometer":300.0,"modelYear":"2010","fuelType":"benz","gearType":"automatic","exteriorColor":"red","interiorColor":"yellow","carType":1,"image":[],"isFavorite":false,

这是我单击产品以访问其详细信息时遇到的错误:

E/flutter (13626): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
E/flutter (13626): id
E/flutter (13626): ^
E/flutter (13626):
E/flutter (13626): #0      int._throwFormatException  (dart:core-patch/integers_patch.dart:131:5)
E/flutter (13626): #1      int._parseRadix  (dart:core-patch/integers_patch.dart:142:16)
E/flutter (13626): #2      int._parse  (dart:core-patch/integers_patch.dart:100:12)
E/flutter (13626): #3      int.parse  (dart:core-patch/integers_patch.dart:63:12)
E/flutter (13626): #4      Cars.fetchAndSetCarDetails.<anonymous closure> 
package:flutter_app/providers/car_provider.dart:88
E/flutter (13626): #5      _LinkedHashMapMixin.forEach  (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (13626): #6      Cars.fetchAndSetCarDetails 
package:flutter_app/providers/car_provider.dart:86
E/flutter (13626): <asynchronous suspension>
E/flutter (13626): #7      _MyCarDetailsState.initState.<anonymous closure> 
package:flutter_app/details/car_details.dart:23
E/flutter (13626): #8      _rootRunUnary  (dart:async/zone.dart:1132:38)
E/flutter (13626): #9      _CustomZone.runUnary  (dart:async/zone.dart:1029:19)
E/flutter (13626): #10     _FutureListener.handleValue  (dart:async/future_impl.dart:137:18)
E/flutter (13626): #11     Future._propagateToListeners.handleValueCallback  (dart:async/future_impl.dart:678:45)
E/flutter (13626): #12     Future._propagateToListeners  (dart:async/future_impl.dart:707:32)
E/flutter (13626): #13     Future._complete  (dart:async/future_impl.dart:512:7)
E/flutter (13626): #14     new Future.delayed.<anonymous closure>  (dart:async/future.dart:313:16)
E/flutter (13626): #15     _rootRun  (dart:async/zone.dart:1120:38)
E/flutter (13626): #16     _CustomZone.run  (dart:async/zone.dart:1021:19)
E/flutter (13626): #17     _CustomZone.runGuarded  (dart:async/zone.dart:923:7)
E/flutter (13626): #18     _CustomZone.bindCallbackGuarded.<anonymous closure>  (dart:async/zone.dart:963:23)
E/flutter (13626): #19     _rootRun  (dart:async/zone.dart:1124:13)
E/flutter (13626): #20     _CustomZone.run  (dart:async/zone.dart:1021:19)
E/flutter (13626): #21     _CustomZone.bindCallback.<anonymous closure>  (dart:async/zone.dart:947:23)
E/flutter (13626): #22     Timer._createTimer.<anonymous closure>  (dart:async-patch/timer_patch.dart:21:15)
E/flutter (13626): #23     _Timer._runTimers  (dart:isolate-patch/timer_impl.dart:382:19)
E/flutter (13626): #24     _Timer._handleMessage  (dart:isolate-patch/timer_impl.dart:416:5)
E/flutter (13626): #25     _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:172:12)
E/flutter (13626):
xin11230 回答:无法从API提取ID数据。如何解决?

您有几个问题。

1-您的forEach闭包看起来像您希望JSON包含要添加到loadedCars的汽车的 list ,但是没有-只是一辆车。这就是为什么extractedDataMap<String,dynamic>而不是List<Map<String,dynamic>>的原因。

2-表示forEach闭包在地图的成员上进行迭代,因此分别使用carId='id'carData=204进行调用,然后再次使用carId='adPrice'carData=25.0等。这显然不是您所期望的!当您尝试将'id'解析为一个整数时,就会发生这种情况。

鉴于当前json中只有一辆汽车,您可以省去循环。您应该提取一辆这样的汽车:

  final response = await http.get(url);
  final extractedData = json.decode(response.body) as Map<String,dynamic>;
  var theOneCar = AddCar(
    id: extractedData['id'],// no need for parse either - id is already an int
    name: extractedData['adTitle'],// etc
    // etc
  print (theOneCar);
本文链接:https://www.f2er.com/3145604.html

大家都在问