【问题标题】:Response.body is Empty FlutterResponse.body 是空的颤振
【发布时间】:2021-01-25 08:45:23
【问题描述】:

我正在尝试使用以下请求从 https://fantasy.premierleague.com/api/bootstrap-static/ 检索数据,但我得到了一个空正文 任何想法如何从这种类型的 API 中检索数据。谢谢 完整代码是

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  Future<String> getData() async {
    http.Response response = await http.get(
      "https://fantasy.premierleague.com/api/bootstrap-static/",
    );
    var data = response.body;
    print(data);
    return response.body;
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          getData();
        },
      ),
      body: Center(
        child: Text("Hello World"),
      ),
    
    );
  }    
}

问题解决了!!! 在我做了一个颤振升级后一切正常,我仍然不知道这是怎么回事

升级前的 Flutter Doctor

Doctor summary (to see all details, run flutter doctor -v):                                                                  
[√] Flutter (Channel master, 1.21.0-10.0.pre.111, on Microsoft Windows 
[Version 10.0.18363.1082], locale en-US)                                                                                                                                 
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)                                            ! Some Android licenses not 
accepted.  To resolve this, run: flutter doctor --android-licenses                      
[√] Android Studio (version 3.6)

[√] VS Code (version 1.50.0)
[!] Connected device
    ! No devices available

! Doctor found issues in 2 categories.

Flutter Doctor afterUpgrade

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel master, 1.23.0-8.0.pre.284, on Microsoft Windows [Version 10.0.18363.1082], locale en-US)

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses
[√] Android Studio (version 3.6)
[√] VS Code (version 1.50.0)
[√] Connected device (1 available)

! Doctor found issues in 1 category.

【问题讨论】:

  • 这个 API 似乎不兼容 CORS;您应该从服务器而不是客户端调用它。
  • 这是否意味着我不能在颤振上使用它?抱歉,我对这个 API 还是很陌生,谢谢
  • @raina77ow 你能不能给我一个例子说明我是怎么做的或者可以帮助理解的,谢谢。
  • 这意味着在网络世界中,您应该从后端调用该 API,然后(使用您的应用程序)使用该后端。 Here's the issue 对该主题进行了长时间的讨论。

标签: android json api flutter dart


【解决方案1】:

你可以试试这个吗?

  Future<String> getData() async {
   http.Response response = await http.get("https://fantasy.premierleague.com/api/bootstrap-static/");
var data = response.body;
   print(data );
   return response.body;
  }

上面的东西肯定有效。我对其进行了测试并附上了屏幕截图。

如果你想通过另一个变量获取返回值,例如这样:

String data = getData();

你需要像这样倾听未来是行不通的:

String data = getData().then((value) => value);

P.S:这个答案不值得-1。

【讨论】:

  • 我收到以下错误,因为正文为空我无法调用 json.decode() E/flutter (9090): [ERROR:flutter/lib/ui/ui_dart_state.cc(171) )] 未处理的异常:FormatException:输入意外结束(在字符 1 处)E/flutter(9090):E/flutter(9090):^ E/flutter(9090):E/flutter(9090):#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)) E/flutter (9090): #1 _ChunkedJsonParser.close (dart:convert-patch/convert_patch.dart:522:7))
  • 导入 dart:convert
  • 或者您可以删除 json.decode 并执行以下 response.body.toString() 我认为我们从网站获取的 json 数据格式不正确或不是 json.decode 可以理解的方式。所以只需将正文转换为字符串并打印它以查看结果
  • 你也可以不使用 toString 我相信它只会用 print(response.body) 打印数据
  • Print(response.body.toString()) 返回 " " 仍然是因为我从 http.get("fantasy.premierleague.com/api/bootstrap-static/") 得到的 response.body ; 是空的,问题不在于格式问题是我得到一个空的 response.body。谢谢
猜你喜欢
  • 2022-01-19
  • 2021-08-20
  • 2021-09-20
  • 1970-01-01
  • 2021-07-28
  • 2020-09-01
  • 1970-01-01
  • 2020-08-19
  • 2021-03-04
相关资源
最近更新 更多