在 Flutter 中获取 pHp 数组或地图作为 JSON 数据?

我正在尝试在我的 flutter 应用程序中使用 json 从服务器获取一些数据。这是我正在使用的功能。


List<String> userFriendList = ["No Friends"];  


Future<http.Response> _fetchSampleData() {

            return http.get('//link/to/server/fetcher/test_fetcher.php');

}


Future<void> getDataFromServer() async {

            final response = await _fetchSampleData();


            if (response.statusCode == 200) {

              Map<String, dynamic> data = json.decode(response.body);    

                userLvl = data["lvl"].toString();

                userName = data["name"];

                userFriendList = List();

                userFriendList = data["friendlist"];  

            } else {

              // If the server did not return a 200 OK response,

              // then throw an exception.

              print('Failed to load data from server');

            }

}

我明白usrLvl了userName。但是对于userFriendList,我收到以下错误:


[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'


服务器端代码(test_fetcher.php):


<?php

    $myObj->name = "JohnDoe";

    $myObj->lvl = 24;


    $friends = array("KumarVishant", "DadaMuni", "BabuBhatt", "BesuraGayak", "BabluKaneria", "MorrisAbhishek", "GoodLuckBaba", "ViratKohli", "LeanderPaes");


    $myObj->friendlist = $friends;


    header('Content-Type: application/json');

    $myJSON = json_encode($myObj);

    echo $myJSON;

?>


萧十郎
浏览 149回答 3
3回答

炎炎设计

这是一个转换错误:List<dynamic> != List<String>您可以通过多种方式转换/投射您的列表。我建议你使用这个库来简化你的 json / Dart 对象转json_serializable 将生成转换方法(fromJson 和 toJson)并处理所有事情。它比手动操作更容易、更安全。

跃然一笑

错误解释了它。从服务器 api 获取的数据被解码为 typeList<dynamic>并且您将 userFriendList 声明为 type&nbsp;List<String>。您需要做的是将 userFriendList 的类型从List<String>&nbsp;userFriendList&nbsp;=&nbsp;["No&nbsp;Friends"];到:List<dynamic>&nbsp;userFriendList&nbsp;=&nbsp;[];

繁花不似锦

正是错误所说的。userFriendList 是 List 类型,您将其作为 List。List<String>&nbsp;userFriendList&nbsp;=&nbsp;["No&nbsp;Friends"];应该List<dynamic>&nbsp;userFriendList&nbsp;=&nbsp;[];如果这对您不起作用,或者完全不同的列表。
打开App,查看更多内容
随时随地看视频慕课网APP