【问题标题】:Api Call in flutter, data returned as list in list扑扑中的API调用,数据以列表形式返回
【发布时间】:2022-01-22 17:55:21
【问题描述】:

我正在尝试构建一个通过 API coingeckoAPI 获取加密日期的应用程序。

我已经设法在应用程序中收到了一个加密货币列表,但是,现在我正在尝试从某个时间范围导入价格数据。这就是我尝试这样做的方式: 我想根据我正在调用的 api 链接获取一个数据列表,其中包含一个时间戳和一个值(价格)。但是当我尝试打印一个等于 API 返回的变量时,我只得到这个:“[]”。但我希望它返回数据列表的列表,如消息底部所示。

void getGraphData(DateTime range) async {
    int date = range.toUtc().millisecondsSinceEpoch;
    int maxDate = DateTime.now().toUtc().millisecondsSinceEpoch;

    var data = await get(
      Uri.parse(
          "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=usd&from=$date&to=$maxDate"),
    );
    if (data.statusCode == 200) {
      List<dynamic> dataList = [];
      dataList = jsonDecode(data.body)["prices"];
      
      print(dataList);
    }
  }

API 数据格式如下:

{
"prices": [
[
1612137600000,
33064.78676701507
],
[
1612224000000,
33405.99035714327
],
[
1612310400000,
35485.98593382442
],
[
1612396800000,
37494.71762460426
],
],
}

如果您想查看,请参阅此处:https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=usd&from=1612129039&to=1640039904

我不知道如何访问内部列表中的数据。所以这些列表的列表,如上图

[
    1612137600000,
    33064.78676701507
    ],

【问题讨论】:

    标签: flutter api dart


    【解决方案1】:

    我添加了一个如何访问内部列表的示例

    
      void getGraphData(DateTime range) async {
        int date = range.toUtc().millisecondsSinceEpoch;
        int maxDate = DateTime.now().toUtc().millisecondsSinceEpoch;
    
        var data = await get(
          Uri.parse(
              "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=usd&from=$date&to=$maxDate"),
        );
        if (data.statusCode == 200) {
          List<dynamic> dataList = [];
          dataList = jsonDecode(data.body)["prices"];
          
          final firstItem = dataList.first;
          print('First: ${firstItem.first} - Last: ${firstItem.last}');
          
        }
      }
    

    【讨论】:

    • 您好,感谢您的回复。我尝试这样做,但出现此错误:[VERBOSE-2:ui_dart_state.cc(209)] 未处理的异常:状态错误:无元素
    • 错误原因是你试图到达的项目不在内部列表@VictorKennedy
    【解决方案2】:

    尝试在非空列表上使用map()forEach(),前提是您确定每个数组项中的字段数是恒定的(这里的 2 是尺寸)如下:

    var list = dataList.map((e) => {"time" : e[0], "value" : e[1]}).toList(growable : true);
    

    您已将数组转换为带有键 timevalue 的映射,您可以轻松地进一步使用它们。

    【讨论】:

    • 好的,我试过了。我如何查看这是否有效。我可以尝试打印什么以查看它是否正常工作?
    • 我尝试了 print(list.first),在添加了您推荐的代码后,我得到了错误:[VERBOSE-2:ui_dart_state.cc(209)] 未处理的异常:状态错误:没有元素。
    • @VictorKennedy 尝试打印 e[0] 和 e[1] 值,看看您是否能够访问这些值,例如。分别为1612137600000和33064.78676701507
    • 谢谢!它有效。
    • 多亏了你,它现在可以工作了,虽然我遇到了另一个错误......
    猜你喜欢
    • 2020-06-20
    • 2021-05-23
    • 2011-08-19
    • 2019-03-10
    • 2018-07-19
    • 2020-07-09
    • 1970-01-01
    • 2021-03-06
    • 2021-07-09
    相关资源
    最近更新 更多