DIO 响应解码问题
Posted
技术标签:
【中文标题】DIO 响应解码问题【英文标题】:DIO response decode issue 【发布时间】:2019-06-19 08:33:26 【问题描述】:我正在使用Dio
发出HTTP
请求
var dio = Dio();
var response =
await dio.get(URL);
final responseBody = json.decode(response.data);
final statusCode = response.statusCode;
if (statusCode != 200 || responseBody == null)
print("status code:$statusCode");
throw new ServerExceptionHandler(
"An error ocurred : [Status Code : $statusCode]", statusCode);
我正在处理的响应
"x_id": "home"
但是json.decode(response.data)
正在抛出异常。
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
奇怪的是,当我将 Dio
替换为 http.get(url)
然后 json.decode(response.body)
与相同的响应完美配合
【问题讨论】:
看看this是否有帮助。 试过不行 您能提供您想要获取的网址吗?或者至少可以使用邮递员获取 json e 将其格式化为您的问题? 更新了 JSON 响应 好的,知道了。写下我的答案。 【参考方案1】:遵循这种方法 将响应作为字符串。现在你可以解码了...
Response<String> response = await DioUtils.getInstance().get(JSON_API);
List responseJson = json.decode(response.data);
return responseJson.map((m) => new User.fromJson(m)).toList();
【讨论】:
【参考方案2】:您的响应数据已经是一个地图,因此您可以简单地这样做:
var response = await dio.get(_url);
var responseBody = response.data;
print(responseBody);
这是显式类型:
Response<Map> response = await dio.get(_url);
Map responseBody = response.data;
print(responseBody);
【讨论】:
是的,它正在工作,DIO 返回解码后的 MAP。不需要解码 @RahulDevanavar 是的。在这种情况下(JSON 正文)就是这样。作为参考,请查看 toString 中的response.dart repo 代码。如果您愿意,也可以进行此检查,但我猜对于 JSON 正文,响应将始终是 Map以上是关于DIO 响应解码问题的主要内容,如果未能解决你的问题,请参考以下文章