Flutter中用Http/Dio获取API的results字段,跳过info字段
解决Rick and Morty API获取results字段的Dio问题
直接提取results字段
这个API返回的是包含info和results的JSON对象,请求成功后直接从响应数据里取response.data['results']就能跳过info字段,不用额外处理它。数据模型适配
如果你已经写了单个Character的数据模型,不用额外创建包含info的根模型,直接把results数组解析成Character列表即可:// 假设你的Character模型已实现fromJson方法 List<Character> characters = List<Character>.from( response.data['results'].map((item) => Character.fromJson(item)) );修复Dio错误
你当前的错误提示太笼统,先把错误捕获逻辑改得具体些,方便定位问题:try { final response = await Dio().get('https://rickandmortyapi.com/api/character'); // 提取并解析results数据 final List<dynamic> resultsData = response.data['results']; List<Character> characters = resultsData.map((json) => Character.fromJson(json)).toList(); // 后续处理拿到的characters数据 } catch (e) { print('具体错误:$e'); // 替换原错误提示,能明确是网络问题还是模型解析问题 }常见错误原因:
- 数据模型字段与API返回不匹配(比如字段名大小写错误,API返回
name你写成Name) - 未正确处理异步逻辑(比如在UI函数直接使用await,需包裹在async函数或用FutureBuilder)
- 网络权限未配置(Android需在AndroidManifest.xml添加
<uses-permission android:name="android.permission.INTERNET"/>)
- 数据模型字段与API返回不匹配(比如字段名大小写错误,API返回
简化版请求代码
若仅需results字段,可直接写异步函数返回Character列表:Future<List<Character>> getCharacters() async { final dio = Dio(); try { final res = await dio.get('https://rickandmortyapi.com/api/character'); return (res.data['results'] as List).map((c) => Character.fromJson(c)).toList(); } catch (e) { throw '获取角色数据失败:$e'; } }
内容的提问来源于stack exchange,提问作者Hashem Hassen
相关产品推荐
相关产品推荐

