如何从 API 获取 json
How to get the json from API
我想做的是从 API 获取 json 并从 json 内容制作按钮。
API 响应没有改变,所以我只想调用一次。(重新加载小部件时不需要回忆)
所以,我的想法是简单地从 initState
调用 API
Future<List> getSmartTags() async {
var url = Uri.parse("http://localhost:8008/api/smarttags/");
var resp = await http.get(url);
return json.decode(resp.body);
}
并想确认 json 是否正确返回。
void initState() {
super.initState();
var temp = getSmartTags();
print(temp);
}
发生此错误。
[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>'
#0 _SmartTagState.getSmartTags (package:flutter_aic/main.dart:64:17)
我认为这是Future
的基本概念,不过我没明白。
我认为每当你用 json 解码你的 html 正文而不是 List
.
时你会得到一个 Map<String, dynamic>
此外,由于 await
,您的 return 值不是 Future。每当请求完成时,最终值都会存储在您的变量 resp
.
中
所以,理论上,它应该是这样工作的:
Map<String, dynamic> getSmartTags() async {
var url = Uri.parse("http://localhost:8008/api/smarttags/");
var resp = await http.get(url);
return json.decode(resp.body);
它会 return 一个 Future<Map<String, dynamic>>
而不是,当你写它时没有 wait
。
并且为了避免由于异步函数和外部 print()
而导致的更多错误,我建议您在函数内部打印 JSON 输出,而不是在 initState 中。
我想做的是从 API 获取 json 并从 json 内容制作按钮。
API 响应没有改变,所以我只想调用一次。(重新加载小部件时不需要回忆)
所以,我的想法是简单地从 initState
调用 API Future<List> getSmartTags() async {
var url = Uri.parse("http://localhost:8008/api/smarttags/");
var resp = await http.get(url);
return json.decode(resp.body);
}
并想确认 json 是否正确返回。
void initState() {
super.initState();
var temp = getSmartTags();
print(temp);
}
发生此错误。
[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>'
#0 _SmartTagState.getSmartTags (package:flutter_aic/main.dart:64:17)
我认为这是Future
的基本概念,不过我没明白。
我认为每当你用 json 解码你的 html 正文而不是 List
.
Map<String, dynamic>
此外,由于 await
,您的 return 值不是 Future。每当请求完成时,最终值都会存储在您的变量 resp
.
所以,理论上,它应该是这样工作的:
Map<String, dynamic> getSmartTags() async {
var url = Uri.parse("http://localhost:8008/api/smarttags/");
var resp = await http.get(url);
return json.decode(resp.body);
它会 return 一个 Future<Map<String, dynamic>>
而不是,当你写它时没有 wait
。
并且为了避免由于异步函数和外部 print()
而导致的更多错误,我建议您在函数内部打印 JSON 输出,而不是在 initState 中。