_TypeError(类型'_InternalLinkedHashMap<String, dynamic>'不是类型'Iterable<dynamic>'的子类型)Flutter
_TypeError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>') Flutter
从 api 获取单个用户时,我遇到了标题中提到的上述错误,我的回复是
{"success":true,"data":{"id":4,"user_id":"4","email":"xyz@example.com","secondaryPhone":"+2515465465465"},"message":"User retrieved successfully."}
我的模型class
class UsersModel({this.id, this.user_id, this.email, this.secondaryPhone});
我的api调用如下
class UsersApi {
Future<List<UsersModel>> fetchUsersById(String uId) async
{String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
{ 'Accept' : 'application/json'};
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200){
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
for( var userr in data ) // error comes on this line
{
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
}
}
return users;
}
}
感谢任何帮助。
您显示的 JSON 不包含任何列表。您暗示当您获取多个用户时,此代码工作正常,可能是因为 jsonData["data"]
在您获取多个用户时实际上返回 List
。
要解决这个问题,您应该检查 jsonData["data"]
的类型。如果它是 List
则执行您当前拥有的,如果不是,则以不同的方式处理它。
例如
Future<List<UsersModel>> fetchUsersById(String uId) async {
String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
{ 'Accept' : 'application/json'};
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200){
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
//Handle data differently if it's a Map
if(data is Map) {
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
return users;
}
//Otherwise, do what you currently have
for( var userr in data )
{
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
}
}
return users;
}
从 api 获取单个用户时,我遇到了标题中提到的上述错误,我的回复是
{"success":true,"data":{"id":4,"user_id":"4","email":"xyz@example.com","secondaryPhone":"+2515465465465"},"message":"User retrieved successfully."}
我的模型class
class UsersModel({this.id, this.user_id, this.email, this.secondaryPhone});
我的api调用如下
class UsersApi {
Future<List<UsersModel>> fetchUsersById(String uId) async
{String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
{ 'Accept' : 'application/json'};
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200){
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
for( var userr in data ) // error comes on this line
{
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
}
}
return users;
}
}
感谢任何帮助。
您显示的 JSON 不包含任何列表。您暗示当您获取多个用户时,此代码工作正常,可能是因为 jsonData["data"]
在您获取多个用户时实际上返回 List
。
要解决这个问题,您应该检查 jsonData["data"]
的类型。如果它是 List
则执行您当前拥有的,如果不是,则以不同的方式处理它。
例如
Future<List<UsersModel>> fetchUsersById(String uId) async {
String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
{ 'Accept' : 'application/json'};
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200){
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
//Handle data differently if it's a Map
if(data is Map) {
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
return users;
}
//Otherwise, do what you currently have
for( var userr in data )
{
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
}
}
return users;
}