【问题标题】:Http request does not completeHttp请求未完成
【发布时间】:2020-07-29 08:14:01
【问题描述】:

我正在尝试从 Internet 上的 csv 文件中获取数据: https://covid.ourworldindata.org/data/owid-covid-data.csv

如果您点击它,您可能已经注意到它会自动下载,我认为这是问题所在。

当我在 dart 中使用 http library 来获取这些数据时,我一开始只取回了其中的一小部分。 response.statusCode 仍然等于 200,其他一切都按预期工作。

我认为自动下载是问题的一部分,但我不知道如何解决这个问题

代码如下:

import 'package:http/http.dart' as http;
...
main(){
  String url = 'https://covid.ourworldindata.org/data/owid-covid-data.csv';
  http.Response response = await http.get(url);
  print(response.body);
}

【问题讨论】:

  • 仅供参考,这取决于浏览器 - Chrome 会下载它,而 Safari 会在标签页中打开
  • 它应该正在下载文件,response.bodyAsBytes 将有一个 Uint8 列表,其中包含文件作为字节,使用 File 类写入文件,或使用 http.readBytes(url)跨度>
  • print 总是截断长字符串。您可能在内存中有整个 csv,但由于截断,您只能看到第一位。试试print(response.body.length) 来证明这一点。
  • @mangusta 好的,我想这不是问题
  • @RichardHeap 是的,我检查了长度,它确实给了我完整的数据。我猜这是我的愚蠢错误。我来自 python,在那里我可以轻松打印诸如此类的长字符串。

标签: csv http flutter dart


【解决方案1】:

这里是一个json格式的例子:

  Future<Response> fetchData() async
  {
   return await http.get("https://covid.ourworldindata.org/data/owid-covid-data.json");
  }

然后在build()方法里面:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: FutureBuilder(
            future: fetchData(),
            builder: (context, AsyncSnapshot<Response> snapshot) {
              if (snapshot.hasData) {
                Map<String, dynamic> map =
                    Map.from(jsonDecode(snapshot.data.body));
                return Text(map["LBN"]["continent"]);
              } else if (snapshot.hasError) {
                return Text("${snapshot.error}");
              }

              // By default, show a loading spinner.
              return CircularProgressIndicator();
            },
          ), // This trailing comma makes auto-formatting nicer for build methods.
        ));
  }

【讨论】:

  • 感谢答案,但我发现实际问题是当你告诉它时,dart 也不会打印所有内容。
  • 是的,这就是原因,它正在提供数据,但最好使用 futurebuilder 来确保它的工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
相关资源
最近更新 更多