未处理的异常:类型“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'类型的子类型发生在实例中