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

Flutter使用http请求接口出现_InternalLinkedHashMap错误如何解决?

报错截图

问题原因
  • 核心错误为类型不匹配:json.decode解析接口返回结果后得到的是Map<String, dynamic>类型,直接将该Map作为参数传给ModelSpescal构造函数时,构造函数要求test参数为String类型,无法直接转换触发运行时报错
  • 已定义的JSON解析工厂方法Fromjson未被调用,没有按照预设逻辑取返回结果里的name字段赋值
  • 入口main函数调用异步方法时未加await,无法获取接口返回的实际数据,只会打印Future实例
修复后的完整代码
import 'dart:convert';
import 'package:http/http.dart' as http;

class ServisApi {
  final client = http.Client();

  Future<ModelSpescal> PokomanSpeciesServisApli(int id) async {
    final Url = Uri.https('pokeapi.co', '/api/v2/pokemon-species/$id/');
    print('pokospikal  ${Url}');
    final response = await client.get(Url);
    // 先校验接口请求状态
    if (response.statusCode == 200) {
      final response1 = json.decode(response.body);
      print(response1.toString().isNotEmpty);
      // 调用已定义的Fromjson工厂方法解析数据
      final ResponsFromjson = ModelSpescal.Fromjson(response1);
      return ResponsFromjson;
    } else {
      throw Exception('接口请求失败,状态码:${response.statusCode}');
    }
  }
}

class ModelSpescal {
  final String test;
  ModelSpescal({required this.test});

  factory ModelSpescal.Fromjson(Map<String, dynamic> jsonTest) {
    return ModelSpescal(test: jsonTest['name']);
  }
}

// main方法添加async修饰
main() async {
  // 异步方法调用添加await
  final result = await ServisApi().PokomanSpeciesServisApli(320);
  print(result.test);
}
额外规范建议
  • 调用http请求后优先校验状态码是否为200再做后续解析,避免接口异常时触发解析错误
  • Dart官方命名规范建议变量、方法名使用小驼峰格式,比如pokomanSpeciesServisApli、url、responsFromjson,更符合通用开发习惯

内容的提问来源于stack exchange,提问作者Mohammad Soleymani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:06:03