如何修复未经处理的异常问题:键入“\u InternalLinkedHashMap”
//Sample Json//
{
"data": [
{
"title": "Ronix",
"year": "Year 5",
"category": "Admin"
},
{
"title": "Ultra",
"year": "Year 11",
"category": "Tutor"
},
{
"title": "Sonet",
"year": "Year 3",
"category": "Admin"
}
]
}
这是我的班级。省道锉
class DataClass{
String title ="";
String year="";
String category="";
DataClass(this.title, this.year, this.category);
DataClass.fromJson(Map<String, dynamic> json){
title = json["title"];
year = json["year"];
category = json["category"];
}
}
还有我的主菜。省道锉
class CreateState1 extends State<JsonData1>{
List<DataClass> _dataClass = [];
Future<List<DataClass>> getMovieData() async {
var response = await http.get(Uri.parse("myjsonApiUrl"));
var datas = [];
if(response.statusCode == 200){
var datasJson = json.decode(response.body);
for(var dataJson in datasJson){
datas.add(DataClass.fromJson(dataJson));
}
}
return _dataClass;
}
@override
Widget build(BuildContext context) {
getMovieData().then((value) {
setState(() {
_dataClass.addAll(value);
});
});
return Scaffold(
backgroundColor: Colors.cyan,
body: ListView.builder(
itemBuilder: (context, index) {
return Card(
child: Column(
children: <Widget>[
Text(_dataClass[index].title),
Text( _dataClass[index].year),
Text(_dataClass[index].category),
],
),
);
},
itemCount: _dataClass.length,
),
);
}
}
而不是
for(var dataJson in datasJson){
datas.add(DataClass.fromJson(dataJson));
}
用这个
for (var dataJson in datasJson['data']) {
datas.add(DataClass.fromJson(dataJson));
}
在您的示例中,datasJson
是一个带有data
键的映射。您想要遍历分配给data
键的列表:
var datasJson = json.decode(response.body)['data'];
正如@hacker1024所说,你在那里丢失了钥匙。
如果您是从Api获取数据,请尝试使用FutureBuilder。
我正在从这里的资产文件夹加载(别忘了添加pubspec.yaml
)
Future<List<DataClass>> getMovieData() async {
final myJson = await rootBundle.loadString("assets/j.json");
// var response = await http.get(Uri.parse(myJson));
// if (response.statusCode == 200) {
final datasJson = json.decode(myJson)["data"] as List;
return datasJson.map((js) => DataClass.fromJson(js)).toList();
// } else
// print("http error");
// return [];
}
以及如何实施
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.cyan,
body: FutureBuilder<List<DataClass>>(
future: getMovieData(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return CircularProgressIndicator();
if (snapshot.hasError)
return Text(snapshot.error.toString());
else if (snapshot.hasData &&
snapshot.connectionState == ConnectionState.done)
return ListView.builder(
itemBuilder: (context, index) {
return Card(
child: Column(
children: <Widget>[
Text(snapshot.data![index].title),
Text(snapshot.data![index].year),
Text(snapshot.data![index].category),
],
),
);
},
itemCount: snapshot.data!.length,
);
else
return Text("impliment more");
}),
);
}
虽然这个问题已经被问了几次,但我没有从我看到的那些人那里得到帮助。所以就这样, 我有一个模拟json文件在我的资产文件夹: 这是: 这里是: 如您所见,我希望在页面加载后立即获取数据,并将所述数据保存在列表中,然后可以在中使用。但每次加载屏幕时,我都会出现以下错误: 我接着看了一些教程,完全忽略了与我不想要的模型相关的任何东西。我错过了什么?我需要做什么才能在一个列表中得到结果,然后在网格视图中使
我想显示fetchdata函数中的数据 但它显示了这个错误: 但是当我硬编码时,它工作正常: postman中作为JSON的API输出: 模拟器功能: 超文本传输协议有什么问题吗?因为API工作正常。
这里是我转换json响应的地方,我只想获取一些响应并在我的应用程序上显示, 错误消息 Json回应: PNLDATA类
Family_View.Dart family_provider.dart
我有这个变量问题,这是我的函数 我犯了这个错误 正在执行热重新加载。。。在902毫秒内重新加载了594个库中的14个。E/flatter(4211):[错误:flatter/lib/ui/ui#dart_state.cc(148)]未处理的异常:类型“String”不是“index”E/flatter(4211)的类型“int”的子类型:\0 DatabaseHelper。getData(包:fl
我收到了错误消息: 被精确定位的线在这里: 返回类型为