DIO 响应解码问题

Rah*_*var 11 android json http dart flutter

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);
    }
Run Code Online (Sandbox Code Playgroud)

我正在配对的回应

{
"x_id": "home"
}
Run Code Online (Sandbox Code Playgroud)

json.decode(response.data)正在抛出异常。

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我替换Diohttp.get(url)然后json.decode(response.body)以相同的响应完美运行时

sha*_*eep 25

您的响应数据已经是一个 Map,因此您可以简单地这样做:

var response = await dio.get(_url);
var responseBody = response.data;
print(responseBody);
Run Code Online (Sandbox Code Playgroud)

这是显式类型:

Response<Map> response = await dio.get(_url);
Map responseBody = response.data;
print(responseBody);
Run Code Online (Sandbox Code Playgroud)

  • 是的,它正在工作,DIO 返回解码后的 MAP。不需要解码 (3认同)

小智 5

遵循这种方法 将响应作为字符串。现在你可以解码它......

 Response<String> response = await DioUtils.getInstance().get(JSON_API);
 List responseJson = json.decode(response.data);
 return responseJson.map((m) => new User.fromJson(m)).toList();
Run Code Online (Sandbox Code Playgroud)