snapshot.data为Null。我正在使用for循环遍历JSON数据并创建对象实例列表

维沙尔·普拉布(Vishal Prabhu)

我正在从json-generator.com检索json数据,并将其解析以在以下代码中创建公司列表。当我打印JsonData变量时,我可以看到数据,但是snapshot.data为null。这是我的代码

import 'package:flutter/material.dart';
import './Object.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'UI_Styles/Company_Card_Style.dart';
import 'dart:convert';

class Companies extends StatefulWidget {
  @override
  _CompaniesState createState() => _CompaniesState();
}

class _CompaniesState extends State<Companies> {
  Future<List<Company>> _getCompanies() async {
    var data = await http.get("http://www.json-generator.com/api/json/get/bUYmnsimgi?indent=2");
    var jsonData = json.decode(data.body);

    List<Company> companies = [];
    for (var c in jsonData) {
      Company company = Company(
          c["name"],
          c["opportunites"],
          c["address"],
          c["city"],
          c["state"],
          c["country"],
          c["zipcode"],
          c["phone"],
          c["timezone"],
          c["pipelineRevenue"],
          c["revenueAchieved"],
          c["tags"]);
      companies.add(company);
    }
    return companies;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        child: FutureBuilder(
            future: _getCompanies(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return CompanyCardStyle(company: snapshot.data[index]);
                    });
              } else {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            }));
  }
}

这是我公司的对象

class Company {
  String name;
  String address;
  int opportunities;
  int pipelineRevenue;
  int revenueAchieved;
  String city;
  String state;
  String country;
  int zipcode;
  double phone;
  String timezone;
  String tags;

  Company(
      this.name,
      this.address,
      this.opportunities,
      this.pipelineRevenue,
      this.revenueAchieved,
      this.city,
      this.state,
      this.country,
      this.zipcode,
      this.phone,
      this.timezone,
      this.tags);
}

我认为for循环存在一些问题,但我无法弄清楚什么是错误的,我是新来解析此类数据的人。

Timilehin Jegede

您做错了一些事情:

  1. 来自端点的某些字段输入了错误的信息data type(电话号码为,String但您使用了doubletags也返回了,List但您使用了String

  2. 在将转换jsonDataCompany对象时,您将大多数构造函数字段相互交换

解:

  1. 为您的Company创建工厂构造函数,以简化json反序列化。您可以查看官方文档中的示例。
  2. 为每个字段使用正确的数据类型。

注意:我将tag字段设置为a,String并且仅访问api中列表中的第一个元素。

公司类别

class Company {
  String name;
  String address;
  int opportunities;
  int pipelineRevenue;
  int revenueAchieved;
  String city;
  String state;
  String country;
  int zipcode;
  String phone;
  String timezone;
  String tags;

  Company(
      this.name,
      this.address,
      this.opportunities,
      this.pipelineRevenue,
      this.revenueAchieved,
      this.city,
      this.state,
      this.country,
      this.zipcode,
      this.phone,
      this.timezone,
      this.tags);

  // make a constructor for converting json to a company object
  factory Company.fromJson(Map<String, dynamic> json) {
    return Company(
      json["name"],
      json["address"],
      json["opportunities"],
      json["pipelineRevenue"],
      json["revenueAchieved"],
      json["city"],
      json["state"],
      json["country"],
      json["zipcode"],
      json["phone"],
      json["timezone"],
      json["tags"][0],
    );
  }
}
  • 公司小工具*
class Companies extends StatefulWidget {
  @override
  _CompaniesState createState() => _CompaniesState();
}

class _CompaniesState extends State<Companies> {
  Future<List<Company>> _getCompanies() async {
    var data = await http
        .get("http://www.json-generator.com/api/json/get/bUYmnsimgi?indent=2");
    var jsonData = json.decode(data.body) as List;
    List<Company> companies = [];
    // convert the json to a list of companies
    companies = jsonData
        .map((company) => Company.fromJson(company))
        .toList(); // new line
    print(companies.length);
    return companies;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
          child: FutureBuilder(
              future: _getCompanies(),
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                if (snapshot.hasData) {
                  return ListView.builder(
                      itemCount: snapshot.data.length,
                      itemBuilder: (BuildContext context, int index) {
                        // use your company card here
                        return Text(
                            'Company $index name: ${snapshot.data[index].name}');
                      });
                } else {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
              })),
    );
  }
}

输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flutter SteamBuilder snapshot.data为空

来自分类Dev

Flutter SteamBuilder snapshot.data为空

来自分类Dev

为什么来自 snapshot.before 和 snapshot.after 的相同对象不相等?

来自分类Dev

Spring Data Neo4j 4.2.0.BUILD-SNAPSHOT OGM 2.1.0-SNAPSHOT NullPointerException

来自分类Dev

SNAPSHOT或非SNAPSHOT是发布给他人使用的库和Maven的约定吗?

来自分类Dev

如何使用存储在FutureBuilder的snapshot.data中的JSON数据(不带类)?

来自分类Dev

Node.snapshot(null,null)更改场景的大小

来自分类Dev

如何保留为SNAPSHOT工件生成的时间戳?

来自分类Dev

Firebase:获取 snapshot.val() 对象的子级

来自分类Dev

Firebase snapshot.ref.parent可能为'null'

来自分类Dev

snapshot.getValue(User.class)返回null

来自分类Dev

满足条件后,Streambuilder的Flutter Snapshot没有数据

来自分类Dev

underscore-contrib不能使用_.snapshot函数

来自分类Dev

如何使用SNAPSHOT进行测试,以及在哪里放置<pluginRepository>?

来自分类Dev

underscore-contrib不能使用_.snapshot函数

来自分类Dev

使用CreateToolhelp32Snapshot()拍摄正在运行的进程的快照时,权限被拒绝

来自分类Dev

spring-boot 1.4.0 SNAPSHOT的Maven存储库是什么?或者在我们的Maven项目中还有其他使用1.4.0 SNAPSHOT的方法吗?

来自分类Dev

Gradle如何在我的buildscript块中为SNAPSHOT版本指定cacheResolutionStrategy?

来自分类Dev

尝试访问vuex中的数据时,Firebase SnapShot.val()返回null

来自分类Dev

扑扑的Firebase snapshot.data.documents:我在这里到底在做什么?

来自分类Dev

如何使用mvn release:update-versions从发行标签创建新的SNAPSHOT分支?

来自分类Dev

如何使用mvn release:update-versions从发行标签创建新的SNAPSHOT分支?

来自分类Dev

Maven错误:“反应堆项目列表中没有SNAPSHOT项目。”

来自分类Dev

zfs snapshot -r之后每个子数据集快照的空间消耗

来自分类Dev

Google Compute Engine,rm w/o snapshot 后的数据恢复选项

来自分类Dev

获取spring-data-rest-webmvc 2.3.0.BUILD_SNAPSHOT的Maven构建错误

来自分类Dev

在Spring Data Neo4j 4.1-SNAPSHOT中检索@QueryResult时出现NoSuchMethodError

来自分类Dev

未捕获(承诺)TypeError:尝试从Firebase Firestore检索文档时,snapshot.data不是函数

来自分类Dev

在useEffect中调用Firestore时出现“未处理的拒绝(TypeError):snapshot.data不是函数”

Related 相关文章

  1. 1

    Flutter SteamBuilder snapshot.data为空

  2. 2

    Flutter SteamBuilder snapshot.data为空

  3. 3

    为什么来自 snapshot.before 和 snapshot.after 的相同对象不相等?

  4. 4

    Spring Data Neo4j 4.2.0.BUILD-SNAPSHOT OGM 2.1.0-SNAPSHOT NullPointerException

  5. 5

    SNAPSHOT或非SNAPSHOT是发布给他人使用的库和Maven的约定吗?

  6. 6

    如何使用存储在FutureBuilder的snapshot.data中的JSON数据(不带类)?

  7. 7

    Node.snapshot(null,null)更改场景的大小

  8. 8

    如何保留为SNAPSHOT工件生成的时间戳?

  9. 9

    Firebase:获取 snapshot.val() 对象的子级

  10. 10

    Firebase snapshot.ref.parent可能为'null'

  11. 11

    snapshot.getValue(User.class)返回null

  12. 12

    满足条件后,Streambuilder的Flutter Snapshot没有数据

  13. 13

    underscore-contrib不能使用_.snapshot函数

  14. 14

    如何使用SNAPSHOT进行测试,以及在哪里放置<pluginRepository>?

  15. 15

    underscore-contrib不能使用_.snapshot函数

  16. 16

    使用CreateToolhelp32Snapshot()拍摄正在运行的进程的快照时,权限被拒绝

  17. 17

    spring-boot 1.4.0 SNAPSHOT的Maven存储库是什么?或者在我们的Maven项目中还有其他使用1.4.0 SNAPSHOT的方法吗?

  18. 18

    Gradle如何在我的buildscript块中为SNAPSHOT版本指定cacheResolutionStrategy?

  19. 19

    尝试访问vuex中的数据时,Firebase SnapShot.val()返回null

  20. 20

    扑扑的Firebase snapshot.data.documents:我在这里到底在做什么?

  21. 21

    如何使用mvn release:update-versions从发行标签创建新的SNAPSHOT分支?

  22. 22

    如何使用mvn release:update-versions从发行标签创建新的SNAPSHOT分支?

  23. 23

    Maven错误:“反应堆项目列表中没有SNAPSHOT项目。”

  24. 24

    zfs snapshot -r之后每个子数据集快照的空间消耗

  25. 25

    Google Compute Engine,rm w/o snapshot 后的数据恢复选项

  26. 26

    获取spring-data-rest-webmvc 2.3.0.BUILD_SNAPSHOT的Maven构建错误

  27. 27

    在Spring Data Neo4j 4.1-SNAPSHOT中检索@QueryResult时出现NoSuchMethodError

  28. 28

    未捕获(承诺)TypeError:尝试从Firebase Firestore检索文档时,snapshot.data不是函数

  29. 29

    在useEffect中调用Firestore时出现“未处理的拒绝(TypeError):snapshot.data不是函数”

热门标签

归档