【问题标题】:DIO response decode issueDIO 响应解码问题
【发布时间】: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 响应
  • 好的,知道了。写下我的答案。

标签: android json http dart flutter


【解决方案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
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 2022-12-08
    • 2021-02-12
    • 1970-01-01
    • 2023-03-23
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多