我试图从一个api(格式为json)中获取数据,该api是通过将node.js上的mysql与express连接而创建的。
我在android studio控制台中运行此错误
[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type
'List<dynamic>'
api当前看起来是这样的
{
"error": false,
"data": [
{
"name": "conner",
"age": 24
},
{
"name": "andrew",
"age": 20
}
],
"message": "Todos list."
}
我正在使用这个教程,只是用我的“name”替换了他的值“title”,https://www.youtube.com/watch?v=-prrdg163to
这是我正在运行的代码
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(new MaterialApp(
home: new HomePage(),
));
}
class HomePage extends StatefulWidget {
@override
HomePageState createState() => new HomePageState();
}
class HomePageState extends State<HomePage> {
Map<String,dynamic> data;
Future<String> getData() async {
var response = await http.get(
Uri.encodeFull("http://10.1.0.109:8080/names"),
headers: {
"Accept": "application/json"
}
);
this.setState(() {
data = JSON.decode(response.body);
});
print (data[1]["data"]);
return "Success!";
}
@override
void initState() {
super.initState();
this.getData();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Listviews"),
),
body: new ListView.builder(
itemCount: data == null ? 0 : data["data"].length,
itemBuilder: (BuildContext context, int index) {
return new Card(
child: new Text(data[index]["data"]),
);
},
),
);
}
}
1条答案
按热度按时间0pizxfdo1#
问题在于json文件的结构与教程中的不同,所以请尝试以下方法
注:
更改数据自
list
至var
或者Map<String,dynamic>
```Map<String,dynamic> data;
itemCount: data == null ? 0 : data["data"].length,