未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复]
Posted
技术标签:
【中文标题】未处理的异常:类型\'List<dynamic>\'不是\'String\'类型的子类型无法获取json数据[重复]【英文标题】:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'String' Can't fetch json data [duplicate]未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复] 【发布时间】:2021-05-09 11:04:15 【问题描述】:谁能帮我解决这个问题。我无法使用flutter http请求从json中获取数据,因为它得到了这个未处理的异常:类型'List'不是'String'类型的子类型并且想要在滚动到底部时加载更多数据屏幕。谁能帮帮我...
postData.dart 文件
class PostData extends StatefulWidget
const PostData(Key key) : super(key: key);
@override
_PostDataState createState() => _PostDataState();
class _PostDataState extends State<PostData>
List<String> getData = List();
ScrollController _scrollController = ScrollController();
@override
void initState()
super.initState();
fetchFive();
_scrollController.addListener(()
if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent)
fetchFive();
);
@override
void dispose()
_scrollController.dispose();
super.dispose();
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text("Load Page"),
toolbarHeight: 65,
backgroundColor: Colors.blueAccent[700],
),
body: ListView.builder(
controller: _scrollController,
itemCount: getData.length,
itemBuilder: (context, index)
return Card(
child: GestureDetector(
child: ListTile(
title: Text(getData[index]),
),
),
);
));
fetch() async
final response =
await http.get('https://my-json-server.typicode.com/typicode/demo/posts');
if (response.statusCode == 200)
setState(()
getData.add(json.decode(response.body));
);
else
throw Exception('Failed to load data');
fetchFive()
for (int i = 0; i < 5; i++)
fetch();
getData.dart 文件模型 json
class Users
final int no;
final String nosiri;
final String lokasi;
final String status;
final String pemilik;
final String thumbnailurl;
Users(
this.no,
this.nosiri,
this.lokasi,
this.status,
this.pemilik,
this.thumbnailurl);
factory Users.fromJson(Map<String, dynamic> json)
return Users(
no: json['no'],
nosiri: json['no_siri'],
lokasi: json['lokasi'],
status: json['status'],
pemilik: json['pemilik'],
thumbnailurl: json['thumbnailurl'],
);
【问题讨论】:
【参考方案1】:作为回复,您收到 List<Map>
,并且您正尝试将其存储在 List<String>
。请将其更改为 List<dynamic>
或 List<Map>
[
"id": 1,
"title": "Post 1"
,
"id": 2,
"title": "Post 2"
,
"id": 3,
"title": "Post 3"
]
【讨论】:
【参考方案2】:通过检查您的代码,您的回复是List<Map>
表单并且您声明List<String>
。所以你需要从List
中删除你的String
格式。
List getData = List();
然后你需要将你的数据转换成List
,如下图,然后在getData
中一一添加。然后您可以将您的数据添加到Text
。
ListTile(
title: Text(getData[index]['title'].toString()),
),
你的 fetch()
方法就像
fetch() async
final response = await http
.get('https://my-json-server.typicode.com/typicode/demo/posts');
if (response.statusCode == 200)
setState(()
final data = json.decode(response.body);
for (var i in data)
getData.add(i);
);
else
throw Exception('Failed to load data');
【讨论】:
【参考方案3】:试试
List<Users> getData = [];
改变
getData.add(json.decode(response.body));
到
getData.addAll(List<Users>.from(json.decode(response.body).map((x) => Users.fromJson(x))));
【讨论】:
但在滚动不起作用时加载数据。数据重复了这么多……你不知道为什么吗? 可能您使用的是 add 而不是 addAll,并且您获取了 5 次?不确定 我正在使用 addAll,是的,我只想获取 5 个数据,但它似乎显示所有数据,当我向下滚动时,它会获取重复的数据...顺便说一句,谢谢 我明白了,在您获取数据后尝试 setState,我强烈建议您在您的情况下使用 flutter_pagewise 所以我需要将 listview 更改为 pagewiselistview 对吗?以上是关于未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型
Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter
未处理的异常:类型“List<dynamic>”不是“List<CustomerTransactionDetail>”类型的子类型
未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复]
未处理的异常:类型“ImmutableMap<String, dynamic>”不是类型转换中“List<dynamic>”类型的子类型
未处理的异常:类型“List<dynamic>”不是 dart/flutter 中“Map<String, dynamic>”类型的子类型