我需要从 API 获取数据,但我的 try-catch 失败并显示 SyntaxError: Unexpected token < in JSON at position 0.
代码:
String problems;
try {
final response = await http.get('http://myURL',headers: {"Accept": "application/json"});
log("after http");
if (response.statusCode == 200) {
final data = json.decode(response.body);
problems = data["IsSuccess"];
return problems.toString();
} else {
throw Exception('Failed to load status data');
}
} catch (exc) {
log("catch:" + exc.toString());
}
}
答案 0 :(得分:1)
网络服务:
import 'dart:convert';
import 'package:http/http.dart' as http;
class NetService {
/* ---------------------------------------------------------------------------- */
static Future<T> getJson<T>(String url) {
return http.get(Uri.parse(url))
.then((response) {
if (response.statusCode == 200) {
return jsonDecode(response.body) as T;
}
print('Status Code : ${response.statusCode}...');
return null;
})
.catchError((err) => print(err));
}
}
主要内容:
import 'dart:async';
import 'package:_samples2/networking.dart';
class IOT {
List data;
FutureOr<void> fetchMeasurements() async {
await NetService.getJson<Map<String, dynamic>>('http://iot.productio.net/api/Measurement/GetMeasurements')
.then((response) {
data = (response != null && response['IsSuccess'])
? response['Entity']
: null;
})
.whenComplete(() => print('Fetching done!....'));
}
}
void main(List<String> args) async {
var iot = IOT();
await iot.fetchMeasurements();
print(iot.data.take(3).toString());
}
结果:
Fetching done!....
({Id: 21315, MeasurementDate: 2021-02-18T22:06:20.8365195, Temperature: 20.6, Humidity: 36.8, Misto: loznice}, {Id: 21314, MeasurementDate: 2021-02-18T22:01:19.1337516, Temperature: 20.6, Humidity: 37.0, Misto: loznice}, {Id: 21313, MeasurementDate: 2021-02-18T21:56:18.1720883, Temperature: 20.6, Humidity: 36.9, Misto: loznice})