【问题标题】:Making HTTP request to my localhost on flutter not working在颤振上向我的本地主机发出 HTTP 请求不起作用
【发布时间】:2018-07-12 14:51:58
【问题描述】:

我正在尝试通过将 node.js 上的 mysql 与 express 连接创建的 api(以 json 格式)将我的数据显示在我的颤振应用程序上。

我在 android studio 控制台中运行这个错误

[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 
'List<dynamic>'

api 目前看起来是这样的

{
    "error": false,
        "data": [
           {
              "name": "conner",
              "age": 24
            },
            {
              "name": "andrew",
              "age": 20
            }
         ],
         "message": "Todos list."
         }

我正在使用本教程,只是将他的值“title”替换为我的“name”,https://www.youtube.com/watch?v=-PRrdG163to

这是我正在运行的代码

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
  runApp(new MaterialApp(
    home: new HomePage(),
  ));
}

class HomePage extends StatefulWidget {
  @override
  HomePageState createState() => new HomePageState();
}
class HomePageState extends State<HomePage> {

  Map<String,dynamic> data;

  Future<String> getData() async {
    var response = await http.get(
        Uri.encodeFull("http://10.1.0.109:8080/names"),
        headers: {
          "Accept": "application/json"
        }
    );

    this.setState(() {
      data = JSON.decode(response.body);
    });
    print (data[1]["data"]);

    return "Success!";
  }

  @override
  void initState() {
    super.initState();
    this.getData();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Listviews"),
      ),
      body: new ListView.builder(
        itemCount: data == null ? 0 : data["data"].length,
        itemBuilder: (BuildContext context, int index) {
          return new Card(
            child: new Text(data[index]["data"]),
          );
        },
      ),
    );
  }
}

【问题讨论】:

    标签: mysql node.js express flutter http-get


    【解决方案1】:

    问题在于您的 JSON 文件的结构与教程中的不同,所以试试这个

    data["data"][1]["name"]
    

    注意:

    将数据从 list 更改为 varMap&lt;String,dynamic&gt;

    Map<String,dynamic> data;
    

    之后您需要获取列表长度,因此在 itemCount 中将其更改为

    itemCount: data == null ? 0 : data["data"].length,
    

    Full Example

    【讨论】:

    • 但是名称必须是字符串不是吗,否则会出现编译错误
    • 对不起,我在代码中出现了小错字,请尝试编辑过的
    • 查看我尝试过的已编辑答案,它可以工作,问题出在数据变量的类型上,我没有注意到它不是列表
    • 对不起,我更新了我的答案第二个问题在列表长度上
    • 即使是this?如果是这样,问题将出在它自己的 API 中。你试过在浏览器上测试吗?
    猜你喜欢
    • 2018-12-04
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多