首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从API检索获取ID数据。如何修复?

无法从API检索获取ID数据。如何修复?
EN

Stack Overflow用户
提问于 2019-11-07 18:41:58
回答 1查看 283关注 0票数 0

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

以下是我的提供程序数据:

代码语言:javascript
复制
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,
  });
}

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

代码语言:javascript
复制
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();
  }

下面是我得到的打印数据:

代码语言:javascript
复制
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,

以下是当我单击该产品以访问其详细信息时得到的错误:

代码语言:javascript
复制
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):
EN

回答 1

Stack Overflow用户

发布于 2019-11-08 02:55:38

你有几个问题。

1-您的forEach闭包看起来像是希望JSON包含一个要添加到loadedCars中的汽车列表,但事实并非如此--只有一辆汽车。这就是为什么extractedDataMap<String, dynamic>而不是List<Map<String, dynamic>>

2--这意味着forEach闭包将遍历映射的成员,因此使用carId='id'carData=204调用一次,然后使用carId='adPrice'carData=25.0等调用一次。这显然不是您所期望的!当您试图将'id'解析为整型时,就会发生异常。

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

代码语言:javascript
复制
  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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58746973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档