【发布时间】:2019-12-18 17:04:47
【问题描述】:
我正在学习使用包DIO https://pub.dev/packages/dio按ID搜索数据,我的问题是每次输入错误的关键字搜索时,应用程序突然崩溃并显示调试消息404 Not找到。
我知道没有找到数据,因为我输入了错误的关键字,但我已经用这段代码处理了这个问题
Widget _searchKeywordMahasiswa() {
return FutureBuilder<List<Mosque>>(
future: api.getMahasiswaById(_searchText),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return Text(snapshot.data[index].id);
},
),
);
} else if (!snapshot.data) { <<<<<< IN THIS LINE
return Center(
child: Icon(
Icons.sentiment_very_dissatisfied,
size: 150.0,
),
);
}
return CircularProgressIndicator();
},
);
// return CircularProgressIndicator();
}
Future<List<Mosque>> getMahasiswaById(String id) async{
try {
var apiRespon = await dio.get('${Urls.BASE_API_URL}/mahasiswa/get/id/$id');
var apiResponJson = apiRespon.data;
print(apiResponJson);
return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
}on DioError catch (e) { <<<<< IN THIS LINE
if(e.response.statusCode == 404){
print(e.response.statusCode);
}else{
print(e.message);
print(e.request);
}
}
}
在同样的情况下,如果我收到错误 400 Bad Request 我的应用程序也会崩溃,而且我已经在处理这个错误但无法正常工作。
你能帮帮我吗?
【问题讨论】:
-
请打印此变量 ${Urls.BASE_API_URL}/mahasiswa/get/id/$id 的内容并将其粘贴到您的浏览器。和“添加评论”让我在您完成此步骤时进行跟踪。谢谢。
-
@chunhunghan 当我将
http://192.168.43.159/wpu-rest-server/apii/mahasiswa/get/ID/$id粘贴到浏览器中时。告诉我An Error Was Encountered. The URI you submitted has disallowed characters. -
请将 $id 更改为真实存在的 id,例如 123 或字符串,然后重做。
-
@chunhunghan 如果我粘贴
http://192.168.43.159/wpu-rest-server/apii/mahasiswa/get/id/5按 id 5 显示数据 -
在 catch 上抛出错误怎么样?并添加 snapshot.hasError?关于futurebuilder的if else语句