【问题标题】:Reading data from url in List从 List 中的 url 读取数据
【发布时间】:2020-10-15 07:16:36
【问题描述】:

我知道我可以从 URL 读取数据:

import 'dart:convert';
import 'dart:io';

new HttpClient().getUrl(Uri.parse('https://docs.google.com/spreadsheets/d/e/2PACX-1vQvf9tp4-fETDJbC-HRmRKvVFAXEAGO4lrYPpVeiYkB6nqqXdSs3CjX0eBMvjIoEeX9_qU6K2RWmzVk/pub?gid=0&single=true&output=csv'))
          .then((HttpClientRequest request) => request.close())
          .then((HttpClientResponse response) => response.transform(new Utf8Decoder()).listen(print));

上面打印了我得到的响应。 另外,我知道可以通过将最后一条语句替换为将读取的字符串放入文件中:

.then((HttpClientResponse response) => response.pipe(new File('foo.txt').openWrite()));

另一方面,我知道我可以将字符串放入 CSV:

// dependencies: csv: ^4.0.3
import 'package:csv/csv.dart';

List<List<dynamic>> rowsAsListOfValues = const CsvToListConverter().convert(yourString);

但是如何将它们组合在一起,以便我使用http 从url 读取数据,如上所示,并将返回的响应解码为csv 变量?

【问题讨论】:

    标签: dart


    【解决方案1】:

    我认为如果你用async 标记你的方法,你会更轻松,这样你就可以使用await 关键字而不是尝试使用.then() 方法。所以是这样的:

    import 'dart:convert';
    import 'dart:io';
    import 'package:csv/csv.dart';
    
    Future<void> main() async {
      print(await csv());
    }
    
    Future<List<List<dynamic>>> csv() async {
      final request = await HttpClient().getUrl(Uri.parse(
          'https://docs.google.com/spreadsheets/d/e/2PACX-1vQvf9tp4-fETDJbC-HRmRKvVFAXEAGO4lrYPpVeiYkB6nqqXdSs3CjX0eBMvjIoEeX9_qU6K2RWmzVk/pub?gid=0&single=true&output=csv'));
      final response = await request.close();
      final csvString = await response.transform(const Utf8Decoder()).first;
      return const CsvToListConverter().convert(csvString);
    }
    

    您可以在此处阅读更多信息:https://dart.dev/codelabs/async-await

    【讨论】:

    • 我怎样才能得到返回到主文件,我尝试将其定义为Future&lt;List&lt;List&lt;dynamic&gt;&gt;&gt; csv() async {.. return rowsAsListOfValues;},但无法将其称为List&lt;List&lt;dynamic&gt;&gt; rowsAsListOfValues = await csv();
    • 更新了我的答案,所以我们现在有一个 csv() 方法。请注意,必须指定此方法以返回 Future,因为它被标记为 async
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2016-06-10
    • 2020-03-20
    相关资源
    最近更新 更多