未处理的异常:类型“int”不是 Flutter 应用程序中“String”类型的子类型

Posted

技术标签:

【中文标题】未处理的异常:类型“int”不是 Flutter 应用程序中“String”类型的子类型【英文标题】:Unhandled Exception: type 'int' is not a subtype of type 'String' in Flutter app 【发布时间】:2021-02-03 10:09:24 【问题描述】:

我正在尝试做一个包含 API 的示例。

这是我要返回的示例 API:

[
    
        "ID": 47,
        "DerslikAd": "a",
        "SinifID": 1,
        "SinifAd": "1. Sınıf"
    ,
    
        "ID": 77,
        "DerslikAd": "4A",
        "SinifID": 4,
        "SinifAd": "4. Sınıf"
    ,
    
        "ID": 76,
        "DerslikAd": "5A",
        "SinifID": 5,
        "SinifAd": "5. Sınıf"
    ,
    
        "ID": 1,
        "DerslikAd": "8-A",
        "SinifID": 8,
        "SinifAd": "8. Sınıf"
    
]

这是我的模型:

class DerslikListesiModel 
  int id;
  String derslikAd;
  String sinifID;
  String sinifAd;

  DerslikListesiModel(
    this.id,
    this.derslikAd,
    this.sinifID,
    this.sinifAd,
  );

  factory DerslikListesiModel.fromJson(Map<String, dynamic> json) 
    return DerslikListesiModel(
      id: json['ID'] != null ? json["ID"] : 0,
      derslikAd: json['DerslikAd'] != null ? json["DerslikAd"] : '',
      sinifID: json['SinifID'] != null ? json["SinifID"] : 0,
      sinifAd: json['SinifAd'] != null ? json["SinifAd"] : '',
    );
  

这是我的服务型号列表:

import 'package:ogretmen_mobil/models/DerslikListesiModel.dart';

class DerslikList 
  final List<DerslikListesiModel> derslerinListesi;

  DerslikList(
    this.derslerinListesi,
  );

  factory DerslikList.fromJson(List<dynamic> parsedJson) 
    List<DerslikListesiModel> derslerinListesi = List<DerslikListesiModel>();
    //photos = parsedJson.map((i)=>Photo.fromJson(i)).toList();
    derslerinListesi =
        parsedJson.map((e) => DerslikListesiModel.fromJson(e)).toList();
    return DerslikList(
      derslerinListesi: derslerinListesi,
    );
  

这是我获取值的 API 服务:

Future<DerslikList> getDerslikListesi(int sonAktifSezonId, int sonAktifOkulId,
      String strTarih, String nTarih) async 
    return this
        .apiRequest(
      "Egitmen/DerslikListesi",
      RequestData(
        sonAktifOkulId: sonAktifOkulId,
        sonAktifSezonId: sonAktifSezonId,
        strTarih: strTarih,
        nTarih: nTarih,
      ),
    )
        .then((value) 
      if (value == null || value == "") 
        return null;
       else 
        dynamic jdata = json.decode(value);
        DerslikList derslikList = DerslikList.fromJson(jdata);
        return derslikList;
      
    );
  

问题是我的反应很好。终端屏幕在这里:

flutter: ###### REQUEST URL: https://test.******/api/Egitmen/DerslikListesi
flutter: ###### REQUEST DATA: ####### 
"ID":null,"OturumToken":"637388088738664992-462dcbff-9ac9-45e2-a6c3-60bec6a","appToken":"****-**-4108-9573-******","kullanici":null,"parola":null,"notificationkey":null,"OgrenciID":"61","SezonID":null,"DerslikID":null,"TakipTanimID":null,"OgretmenID":null,"GunDDMMYYYY":null,"SonAktifOkulID":1,"SonAktifSezonID":2021,"strTarih":"4.10.2020","nTarih":"2020-10-4","TestID":null,"DogruSayisi":null,"YanlisSayisi":null,"BosSayisi":null
flutter: ###### RESPONSE DATA: ####### 
["ID":47,"DerslikAd":"a","SinifID":1,"SinifAd":"1. Sınıf","ID":77,"DerslikAd":"4A","SinifID":4,"SinifAd":"4. Sınıf","ID":76,"DerslikAd":"5A","SinifID":5,"SinifAd":"5. Sınıf","ID":1,"DerslikAd":"8-A","SinifID":8,"SinifAd":"8. Sınıf"]
 ############################
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: type 'int' is not a subtype of type 'String'
#0      new DerslikListesiModel.fromJson (package:ogretmen_mobil/models/DerslikListesiModel.dart:18:40)
#1      new DerslikList.fromJson.<anonymous closure> (package:ogretmen_mobil/models/DerslikListesi.dart:14:51)
#2      MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
#3      ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#4      new List.from (dart:core-patch/array_patch.dart:38:29)
#5      new List.of (dart:core-patch/array_patch.dart:68:17)
#6      ListIterable.toList (dart:_internal/iterable.dart:211:44)
#7      new DerslikList.fromJson (package:ogretmen_mobil/models/DerslikListesi.dart:14:64)
#8      ApiService.getDerslikListesi.<anonymous closure> (package:ogretmen_mobil/services/api_service.dart:209:47)
#9      _rootRunUnary (dart:async/zone.dart:1198:47)
#10     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#11     _FutureListener.handleValue (dart:async/<…>
[VERBOSE-2:profiler_metrics_ios.mm(184)] Error retrieving thread information: (ipc/send) invalid destination port

我收到此错误消息:

Unhandled Exception: type 'int' is not a subtype of type 'String'

这是我想用数据准备的示例屏幕:

class DerslikListesiGosterScreen extends StatefulWidget 
  static final String id = "derslik_listesli_goster_screen";

  final int sonAktifSezonId;
  final int sonAktifOkulId;
  final String strTarih;
  final String nTarih;
  DerslikListesiGosterScreen(
    this.sonAktifSezonId,
    this.sonAktifOkulId,
    this.strTarih,
    this.nTarih,
  );
  @override
  _DerslikListesiGosterScreenState createState() =>
      _DerslikListesiGosterScreenState();


class _DerslikListesiGosterScreenState
    extends State<DerslikListesiGosterScreen> 
  DerslikList list;

  var id, sinifID, derslikAd, sinifAd;
  @override
  void initState() 
    
    if (widget.sonAktifSezonId != null &&
        widget.sonAktifOkulId != null &&
        widget.strTarih != null &&
        widget.nTarih != null) 
      // send token server
      ApiService()
          .getDerslikListesi(
        widget.sonAktifSezonId,
        widget.sonAktifOkulId,
        widget.strTarih,
        widget.nTarih,
      )
          .then(
        (value) 
          loadingHide(context);
          if (value == null) 
            showCustomDialog(context,
                title: "Giriş Hatası", subTitle: value.toString());
           else 
            list = value;
            print(list);
            id = list.derslerinListesi[0].id;
            sinifID = list.derslerinListesi[0].sinifID;
            derslikAd = list.derslerinListesi[0].derslikAd;
            sinifAd = list.derslerinListesi[0].sinifAd;
            
            
          
        ,
      );
     else 
      showCustomDialog(context,
          title: "Giriş Hatası",
          subTitle: "Lütfen kullanıcı adı ve şifre giriniz");
    

    super.initState();
  

  Widget build(BuildContext context) 
    return Scaffold(
        appBar: AppBar(
          title: Text('Derslik Listesi'),
        ),
        body: Column(
          children: [
            Text('$derslikAd'),
            Text('$sinifAd'),
          ],
        ));
  

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

错误可能在这里:

class DerslikListesiModel 
  int id;
  String derslikAd;
  String sinifID; <-- this should be an int
  String sinifAd;

【讨论】:

是的,我没有收到任何错误,但我在屏幕上看到了 2 个空值,这意味着我仍然无法获得我认为的数据:\ flutter: 'DerslikList' 在我的终端上的实例?我该怎么办?如果您知道答案,请与我分享您的意见?【参考方案2】:

尝试在 DerslikListesiModel 类中将类型 sinifID 从 String 更改为 int

  int sinifID;

【讨论】:

是的,我没有收到任何错误,但我在屏幕上看到了 2 个空值,这意味着我仍然无法获得我认为的数据:\ flutter: 'DerslikList' 在我的终端上的实例?我该怎么办?如果您知道答案,请与我分享您的意见? 使用序列化生成代码flutter.dev/docs/development/data-and-backend/json

以上是关于未处理的异常:类型“int”不是 Flutter 应用程序中“String”类型的子类型的主要内容,如果未能解决你的问题,请参考以下文章

未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振

未处理的异常:类型“int”不是类型转换中“List<int>”类型的子类型

如何修复此错误未处理的异常:类型“字符串”不是“索引”类型“int”的子类型

Flutter 中的错误:未处理的异常:“Null”类型不是“String”类型的子类型

Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter

Flutter fromJson - 未处理的错误未处理的错误类型'String'不是'int'类型的子类型发生在实例中