【发布时间】:2026-01-12 17:00:01
【问题描述】:
我正在尝试加载从 Web 服务获取的数据,但没有任何结果。 JSON 恢复正常,但我无法将其解码以在我的应用程序中使用。我还可以在 Web 浏览器中使用该 URL,并且 JSON 可以正常返回。我想我可能试图错误地解码和加载 JSON。 任何关于我哪里出错的帮助都会很棒。谢谢大家。
干杯,
保罗
JSON 示例:
{
"rows":[
{
"JOBID":23,
"START_DATE":1588809600000,
"START_TIME":"07:30",
"JOB_NAME":"Cleaner"
},
{
"JOBID":23,
"START_DATE":1588809600000,
"START_TIME":"08:30",
"JOB_NAME":"Manager"
}
]
}
型号:
class StaffJobs {
List<SJRows> sjRows;
StaffJobs({this.sjRows});
StaffJobs.fromJson(Map<String, dynamic> json) {
if (json['rows'] != null) {
sjRows = List<SJRows>();
json['rows'].forEach((v) {
sjRows.add(SJRows.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
if (this.sjRows != null) {
data['rows'] = this.sjRows.map((v) => v.toJson()).toList();
}
return data;
}
}
class SJRows {
int jobId;
int startDate;
String startTime;
String jobName;
SJRows(
{this.jobId,
this.startDate,
this.startTime,
this.jobName});
SJRows.fromJson(Map<String, dynamic> json) {
jobId = json['JOBID'];
startDate = json['START_DATE'];
startTime = json['START_TIME'];
jobName = json['JOB_NAME'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['JOBID'] = this.jobId;
data['START_DATE'] = this.startDate;
data['START_TIME'] = this.startTime;
data['JOB_NAME'] = this.jobName;
return data;
}
}
在我打印作业计数的 initState 中,我得到 0。
在我在 ListTile 中显示几个字段的代码末尾附近,我不确定如何引用数据。
在我测试 response.statusCode 为 200 之后,我尝试将 response.body 打印到控制台并且所有 JSON 都在那里,所以 http.get 工作正常。
我还在控制台中看到一个错误: E/flutter (15432): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:类型“_InternalLinkedHashMap”不是类型转换中“List”类型的子类型
在我尝试加载员工职位的屏幕中,我有以下代码:
class MyJobs extends StatefulWidget {
@override
_MyJobsState createState() => new _MyJobsState();
}
class _MyJobsState extends State<MyJobs> {
List<StaffJobs> jobs = List();
bool isLoading = false;
_getJobs() async {
setState(() {
isLoading = true;
});
final response = await http.get(Uri.encodeFull('$jobUrl'));
if (response.statusCode == 200) {
setState(() {
isLoading = false;
});
jobs = (json.decode(response.body) as List).map((data) => StaffJobs.fromJson(data)).toList();
} else {
throw Exception('Failed to load jobs');
}
}
@override
void initState() {
super.initState();
_getJobs();
print('Count = ${jobs.length}');
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: rmoAppBar(subText: 'My Jobs'),
drawer: RmoMenu(),
body: isLoading
? Center(child: CircularProgressIndicator())
: Container(
child: ListView.builder(
itemCount: jobs.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(jobs[index].sjRows.jobName), <------ Not sure how to reference data
subtitle: Text(jobs[index].sjRows.startTime), <--- This doesn't compile
);
},
),
),
);
}
}
【问题讨论】: