You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter拉取JSON数据时出现类型不匹配及主机查询失败异常如何解决

第一类异常(类型不匹配)解决方法

异常原因

你最初代码直接对json.decode(response.body)返回的Map类型整体调用forEach方法,Map的forEach要求传入的回调函数必须接收2个参数(key、value),但你传入的回调仅接收1个element参数,类型不匹配触发报错。
你调整为遍历data['products']的代码已经修复了这个问题,data['products']是数组类型,数组的forEach仅需要1个参数的回调,逻辑正确。

配套需修正的解析逻辑问题

即便修复遍历逻辑,后续解析JSON还会遇到其他报错,需同步修改:

  • 字段类型不匹配:Product类中price、discount、finalprice定义为int?,但接口返回的是浮点型数值,需修改为double?或num?类型
  • 字段拼写不匹配:接口返回的收藏字段为favourites(带u),你代码中写的是favorites,拼写不一致会导致取值为null;同时接口返回的favourites是数组类型,你定义为bool?,可修改为favorites = (json['favourites'] as List?)?.isNotEmpty ?? false;实现布尔类型赋值
  • 分类解析逻辑错误:接口返回的商品分类结构为嵌套结构{"name": "Shirts", "category": {"id": 1, "name": "Clothing"}},你当前Category.fromJson直接取json['id']会得到null,需调整为:
Category.fromJson(Map<String, dynamic> json) {
  id = json['category']['id'];
  categoryName = json['category']['name'];
}

第二类异常(域名解析失败)解决方法

报错SocketException: Failed host lookup: 'ecom.techoxy.in'是网络层面的问题,按以下步骤排查:

  • 确认测试设备/模拟器已连接正常可用的公网
  • 先在电脑浏览器访问完整接口地址https://ecom.techoxy.in/home,确认接口本身可以正常访问、域名可正常解析
  • 如果你是本地部署的后端服务,不要用域名,直接填写你电脑的局域网IP地址,注意模拟器不要使用127.0.0.1(该地址指向模拟器本身),要填电脑实际的局域网IP
  • 检查Android项目网络权限:在android/app/src/main/AndroidManifest.xml中添加网络权限声明:
<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者Rohit Bongade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:36:02