【发布时间】:2018-06-02 20:42:07
【问题描述】:
我正在尝试制作一个从this JSON list 检索数据 并将此数据解析 到listview 的应用程序。
使用下面的代码,我希望看到的第一条记录是ID、NAME 和PRICE,但似乎我无法检索PRICE,因为这是一个int,我正在从 JSON 列表中调用一个string。
此外,'PRICE' 和 'ID' 一样是一个 int,如下所述,但 'ID' 可以很好地获取,而 'PRICE' 只是在列表视图中显示 'NULL'
我不知道如何解决这个问题,希望我能在这个平台上得到我正在寻找的答案。
FirstPage.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
【问题讨论】:
-
停止在任何地方使用 Bold ,为了获得最佳质量,请勿使用 help me 或 i hope help me 或类似的事情,请注意每个人都知道 stackoverflow 是为了提供帮助。欲了解更多信息,请阅读此处:stackoverflow.com/help/how-to-ask
-
好的,对不起,山姆,下次我会记住这一点的,不过有什么想法吗?
-
如果问题与
price类型有关,您必须得到与ID相同的错误,因为ID 也是int。对吗? -
哦是的没错,问题是 ID 被正确解析,但价格只是吐出'null',所以它一定是别的东西
-
在
flutter网站上阅读此文档。这是本文档中的解析示例:flutter.io/cookbook/networking/background-parsing