簡體   English   中英

未處理的異常:“String”類型不是“List”類型的子類型<dynamic> &#39;

[英]Unhandled Exception: type 'String' is not a subtype of type 'List<dynamic>'

我試圖從解析圖像images從JSON響應,但我得到的錯誤,指出為未處理的異常:類型“字符串”不是類型的子類型“列表”

{
    "status": true,
    "record": {
        "adid": "3",
        "adsubcatid": "7",
        "aduserid": "2",
        "adname": "wfw fw",
        "adcoverimg": "http://codecell.in/girrivi/assets/adcover/ic_service_search.png",
        "addesc": "e fe fe ",
        "ads_price": "5000",
        "ads_location": "mysuru",
        "created_date": "13/10/2020",
        "user_name": "sunil",
        "images": "{'adsimg_img':'http://codecell.in/girrivi/assets/adimgs/carpenter.png'},{'adsimg_img':'http://codecell.in/girrivi/assets/adimgs/electrician.png'},{'adsimg_img':'http://codecell.in/girrivi/assets/adimgs/gardner.png'}"
    }
}
List images;
Future<String> getProductDetails() async {
    String productDetailsUrl = Constant.productDetailsUrl+widget.id;
    print(productDetailsUrl);
    Map<String, String> headers = {'Content-Type' : 'application/json'};

    final response = await http.get(productDetailsUrl, headers: headers);
    print(response.body);
    if(response.statusCode == 200){
      jsonResponse = json.decode(response.body);
      print('Response in Profile Screen: ' + response.body);
      print("Price - "+jsonResponse['record']['ads_price']);
      setState(() {
        price = jsonResponse['record']['ads_price'];
        title = jsonResponse['record']['adname'];
        description = jsonResponse['record']['addesc'];
        location = jsonResponse['record']['ads_location'];
        publishedOn = jsonResponse['record']['created_date'];
        postedBy = jsonResponse['record']['user_name'];
        adId = jsonResponse['record']['adid'];
        postedById = jsonResponse['record']['aduserid'];
        images = jsonResponse['record']['images'];
      });
    }
  }

除了圖像,我以正確的方式獲取所有細節

正如我在您的圖片回復中看到的那樣,您有這個 {'adsimg_img': 'some_url'}。

所以我會在你的代碼中這樣做

setState(() {
  .
  .
  .
  adId = jsonResponse['record']['adid'];
  postedById = jsonResponse['record']['aduserid'];
  images = (jsonResponse['record']['images'] as List)
    ?.map((i) => i['adsimg_img'])
    ?.toList();
});

所以最后的圖像看起來像 ['url1', 'url2', ...] // 字符串列表

我沒有測試它,但它應該可以解決問題:)

在您添加的 json 響應片段中, images的值應該是一個數組,但它在雙引號中,基本上是一個字符串。

如果將該片段放入像這樣的 jsonValidator 中,它會顯示關鍵images的值是一個字符串,而不是您期望的數組。

json 中的一組對象的格式與此類似

{
  "user_name": "sunil",
  "images": [
    {
      "adsimg_img":"http://codecell.in/girrivi/assets/adimgs/carpenter.png"
    },
    {
      "adsimg_img":"http://codecell.in/girrivi/assets/adimgs/carpenter.png"
    },
    {
      "adsimg_img":"http://codecell.in/girrivi/assets/adimgs/carpenter.png"
    }
  ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM