错误'_InternalLinkedHashMap <string,dynamic =“”>'不是'Iterable <dynamic>'类型的子类型

时间:2018-07-26 06:18:27

标签: android dart flutter mobile-application

使用搜索功能显示从第三者的第三方API获取的列表 该错误仅在我运行该应用程序时显示,它表示_InternalLinkedHashMap'不是'Iterable

类型的子类型。

请哭 ***编辑播放此错误显示的代码后显示的新错误 'String'类型不是Map-dynamic,dynamic-

类型的子类型
authenticate

数据模型类

        Future<Null> getStoreDetails() async {
                var basicAuth = 'Basic ' +
                    base64Encode(utf8.encode('api_token_key'));
                var result;

                var response = await http.get(url, headers: {'authorization': basicAuth});
                if (response.statusCode == 200) {
                  var responseJson = json.decode(response.body);
                  setState(() {
             /Where the error is 
                    for (Map storedetails in responseJson) {
                      _searchResult.add(StoreDetails.fromJson(storedetails));
                    }
                  });
                } else if (response.statusCode != 200) {
                  result = "Error getting response:\nHttp status ${response.statusCode}";
                  print(result);
                }
              }
              @override
              void initState() {
                super.initState();
                getStoreDetails();
              }

错误

class StoreDetails {
  final int businessunitid;
  String citydescription;

  StoreDetails({
    this.businessunitid,
    this.citydescription,
  });

   factory StoreDetails.fromJson(Map<String, dynamic> data) {
    return new StoreDetails(
      businessunitid: data['businessunitid'],
      citydescription: data['citydescription'],

    );
  }
}

2 个答案:

答案 0 :(得分:1)

responseJson的值是一个映射。您正在尝试在其上进行for ... in,并且该操作仅适用于可迭代对象,而映射不是可迭代对象。

您需要弄清楚收到的JSON的结构。它可能包含您要迭代的列表,或者您可能要迭代responseJson.values。不知道格式和要使用的格式是不可能知道的。

如果您在下面的评论中说JSON是单个对象,那么您的代码应该只是:

...
setState(() {
  _searchResult.add(StoreDetails.fromJson(responseJson));
});
...

(我对Flutter的了解还不够,不知道对状态进行异步初始化是否是一个好习惯,但是我希望它很危险-例如,小部件可能在setState被破坏之前就被销毁了。

答案 1 :(得分:0)

我正在使用php,这是它的一个工作示例,请记住'json_encode($udresponse['userdetails']);返回所需的适当数组格式,然后array_push($udresponse['userdetails'],$userdetails);将每个项目添加到数组中。

$udresponse["userdetails"] = array();
$query = mysqli_query($db->connect(),"SELECT * FROM employee WHERE  Employee_Id ='$UserId'") or die(mysqli_error());
if (mysqli_num_rows($query) > 0) {
    while ($row = mysqli_fetch_array($query)) {
        $userdetails= array();
        // user details
        $userdetails["customerid"]=$row["Employee_Id"];
        $userid=$row["Employee_Id"];
        $userdetails["username"]=$UserName;
        $userdetails["fullname"]=$Fullname;
        $userdetails["email"]=$Email;
        $userdetails["phone"]=$Phone;
        $userdetails["role"]=$UserRole;
        $userdetails["restaurantid"]=$RestaurantId;
        array_push($udresponse['userdetails'],$userdetails);
    }  
    $udresponse["success"] = 1;
    $udresponse["message"] = "sign in Successful";
    //echo json_encode($response);
    echo json_encode($udresponse['userdetails']);
} else {   
    $udresponse["success"] = 2;
    $udresponse["message"] = "error retrieving employee details";
    echo json_encode($udresponse);
}