早上好,知更鸟 2023-03-08 17:36 采纳率: 80%
浏览 39
已结题

关于flutter处理API接口返回JSON的问题

我把主函数里面的API接口函数,转移在另一个dart文件,然后在主函数导入它,方便维护代码,但是很快就发现了问题
下面是API接口函数以及测试处理

import 'dart:convert';
import 'package:http/http.dart' as http;
import './tiantianjijin/tiantianjijn_jtod.dart';
tiantianjijin(Tiantianjijin? t) async{
  var headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Cookie': 'st_si=23513143112904; st_asi=delete; st_pvi=75677265749136; st_sp=2022-08-30%2014%3A49%3A55; st_inirUrl=https%3A%2F%2Fwww.nowcoder.com%2F; st_sn=4; st_psi=20230303151428570-112200312935-2690096899',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://fund.eastmoney.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57',
    'Accept-Encoding': 'gzip',
  };
  http://api.fund.eastmoney.com/FundGuZhi/GetFundGZList?type=1&sort=3&orderType=desc&canbuy=1&pageIndex=1&pageSize=200&callback=jQuery1830052794852709326934_1677850528473&_=1677850531737
  var url = Uri.parse('http://api.fund.eastmoney.com/FundGuZhi/GetFundGZList?type=1&sort=3&orderType=desc&canbuy=1&pageIndex=1&pageSize=200');
  var res = await http.get(url, headers: headers);
  if (res.statusCode != 200) throw Exception('http.get error: statusCode= ${res.statusCode}');
  Tiantianjijin t = Tiantianjijin.fromJson(jsonDecode(res.body));
  for (var element in t!.data!.list!) { print("${element.bzdm}");}
}

这是主函数部分代码

class home extends StatefulWidget {
  @override
  State<home> createState() => _homeState();
}

class _homeState extends State<home> {
  late String aa;
  late Tiantianjijin? t=null;
  @override
  void initState(){
    super.initState();
    // xueqiu();
    tiantianjijin(t);
  }

结果报错,好像是说t变量没有初始化,我是打算把t变量扔给API接口函数处理并给它赋值。这个报错的原因是先后顺序不一样吗还是

LateInitializationError: Field 't' has not been initialized.
  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-08 18:08
    关注

    “Devil组”引证GPT后的撰写:

    • 报错的原因是在初始化 _homeState 类中的 t 变量时,您将其初始化为 null,而在 initState 方法中调用 tiantianjijin(t) 时,您将 null 传递给了 tiantianjijin 函数。由于 tiantianjijin 函数期望一个非空的 Tiantianjijin 类型的对象,因此程序会抛出异常。
    • 解决这个问题的方法是,在 _homeState 类中定义一个 t 变量,并在 initState 方法中调用 tiantianjijin 函数时将其传递给该函数。

    具体地,可以这样修改代码:

    class _homeState extends State<home> {
      late String aa;
      Tiantianjijin? t;
    
      @override
      void initState(){
        super.initState();
        t = Tiantianjijin();  // 或者根据需要初始化为其他值
        tiantianjijin(t);
      }
      ...
    }
    
    
    

    在 _homeState 类中定义了一个名为 t 的变量,并在 initState 方法中初始化它。然后,在调用 tiantianjijin 函数时,您可以将这个变量传递给它。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月8日

悬赏问题

  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态