gpt4 book ai didi

json - Flutter JSON String/Int 命令

转载 作者:IT王子 更新时间:2023-10-29 07:10:13 26 4
gpt4 key购买 nike

我正在尝试制作一个从 this JSON list 检索数据 的应用程序并将此数据解析listview

根据下面的代码,我希望看到的第一条记录是IDNAMEPRICE,但似乎我无法检索到 PRICE,因为它是一个 int 并且我正在从 调用一个 string JSON 列表。

另外,'PRICE' 和 'ID' 一样是一个 int,正如下面提到的 sam,但是 'ID' 被提取得很好,而 'PRICE' 只是在 ListView 中说 'NULL'

我不知道如何解决这个问题,希望我能在这个平台上得到我正在寻找的答案。

第一页.dart :

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

void main() {
runApp(MaterialApp(
home: StarWarsData(),
));
}

class StarWarsData extends StatefulWidget {
@override
StarWarsState createState() => StarWarsState();
}

class StarWarsState extends State<StarWarsData> {
final String url = "https://api.coinmarketcap.com/v2/ticker/";
List data;

Future<String> getSWData() async {
var res = await http
.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});

setState(() {
var resBody = json.decode(res.body);
data = resBody["data"];
});

return "Success!";
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Cryp-Tick Crypto Exchange"),
centerTitle: true,
backgroundColor: Colors.black,
),
body: ListView.builder(
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, int index) {
return new Container(
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Card(
child: Container(
padding: EdgeInsets.all(15.0),
child: Row(
children: <Widget>[
Text("Id: "),
Text('${data[index]["id"]}',
style: TextStyle(
fontSize: 18.0, color: Colors.black87)),
],
)),
),
Card(
child: Container(
padding: EdgeInsets.all(15.0),
child: Row(
children: <Widget>[
Text("Name: "),
Text('${data[index]["name"]}',
style: TextStyle(
fontSize: 18.0, color: Colors.red)),
],
)),
),
Card(
child: Container(
padding: EdgeInsets.all(15.0),
child: Row(
children: <Widget>[
Text("Price: "),
Text('${data[index]["price"]}',
style: TextStyle(
fontSize: 18.0, color: Colors.black87)),
],
)),
),
],
),
),
);
},
),
);
}

@override
void initState() {
super.initState();
this.getSWData();
}
}

我在调试控制台中收到的错误:

E/flutter (25480): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (25480): type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List' where
E/flutter (25480): _InternalLinkedHashMap is from dart:collection
E/flutter (25480): String is from dart:core
E/flutter (25480): List is from dart:core

最佳答案

我不认为问题出在你的想法上。您将数据输入为 List :

List data;

然后你像这样填充它:

data = resBody["data"];

错误说:

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List'

这表明 resBody["data"]` 是一个映射而不是一个列表,如果您查看正在拉取的 URL 中的 JSON,它的开头如下:

{
"data": {
"1": {

那个data object 不是列表/数组,它是一个对象/ map 。您应该更改 data 的类型变量为 Map<String, dynamic>将数据转换为 List在将其存储在变量中之前。


评论后编辑

我能够通过添加 .values.toList() 来完成这项工作并将 JSON 剥离为仅前两条记录:

Flutter

然而,对于来自该 url 的所有 JSON,它似乎是错误的。所以,也许 JSON 中的某些东西触发了错误。更奇怪的是,它似乎在 DartPad 中运行良好!

关于json - Flutter JSON String/Int 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com