我想使用rest API从服务器中获取一些数据。这段代码一切正常:
Future<List<Mosque>> getMahasiswa() async {
var apiRespon = await http.get('$baseURL/mahasiswa/');
if(apiRespon.statusCode == 200 ){
final apiResponJson = json.decode(apiRespon.body);
return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
}else{
throw Exception('Failed Load');
}
}
但是当我将其更改为时出现错误:
它将给我以下内容
Exception has occurred.
FormatException (FormatException: Unexpected end of input (at character 1)
^
)
Future getMahasiswaRevisi() async{
var rq = http.Request('GET',Uri.parse('$baseURL/mahasiswa/'));
http.StreamedResponse response = await http.Client().send(rq);
int statusCode = response.statusCode;
final responseJson = json.decode(rq.body); <- THIS LINE ERROR APPEAR
statusCode == 200 ? print('success get mahasiswa with statusCode $statusCode $responseJson ') : print('failed with statusCode : $statusCode') ;
}
如果您想知道为什么即使功能获取我仍然可以更改代码,那是因为我想将所有功能 CRUD Operation 更改为一样,就像这样:
Future addMahasiswaRevisi(headers,body) async{
http.Request rq = http.Request('POST',Uri.parse('$baseURL/mahasiswa/add/'))..headers.addAll(headers);
rq.bodyFields=body;
http.StreamedResponse response = await http.Client().send(rq);
int statusCode = response.statusCode;
print(statusCode.toString());
print(rq.toString());
statusCode == 201 ? print('Successs Add with status Code $statusCode') : print('Fail with StatusCode : $statusCode');
}
Future deleteMahasiswaRevisi(headers,body) async{
http.Request rq = http.Request('DELETE',Uri.parse('$baseURL/mahasiswa/delete/'))..headers.addAll(headers);
rq.bodyFields=body;
http.StreamedResponse response =await http.Client().send(rq);
int statusCode = response.statusCode;
print(statusCode.toString());
print(rq.toString());
statusCode == 204 ? print('Successs Delete with status Code $statusCode') : print('Fail with StatusCode : $statusCode');
}
Future updateMahasiswaRevisi(dynamic headers, dynamic body) async{
http.Request rq = http.Request('PUT',Uri.parse('$baseURL/mahasiswa/update/'))..headers.addAll(headers);
rq.bodyFields=body;
http.StreamedResponse response = await http.Client().send(rq);
int statusCode = response.statusCode;
print(statusCode.toString());
print(rq.toString());
statusCode == 204 ? print('Success Update with Status Code $statusCode') : print('Fail With StatusCode : $statusCode');
}
我对此代码进行了一些比较,并打印了以下内容
var apiRespon = await http.get('$baseURL/mahasiswa');
var rq = http.Request('GET',Uri.parse('$baseURL/mahasiswa/'));
print(apiRespon.body);
print(rq.body);
产生的结果:
print(apiRespon.body);
->{"status":true,"data":[{"id":"127","nrp":"4444","nama":"Agus Setiawan","email":"agus.setiawan@gmail.com","jurusan":"Teknik Komputer"},{"id":"128","nrp":"9090","nama":"Zeffry Reynando","email":"zeffry.reynando@gmail.com","jurusan":"Rekayasa Perangkat Lunak"}]}
print(rq.body);
-> Null {}
我不知道为什么会出错,我尝试打印($ responseJson),但应用程序立即崩溃。
希望大家都能帮助我。
谢谢