Flutter 如何处理颤振中的Dio超时错误?
我正在使用Dio处理API函数 这是我的密码:Flutter 如何处理颤振中的Dio超时错误?,flutter,dart,dio,Flutter,Dart,Dio,我正在使用Dio处理API函数 这是我的密码: Future<List<ItemModel>> getItems() async { try { Response response = await dio.get("$_apiUrl$_itemEndPoint", options: Options(headers: { "Accept": 'application/json', }))
Future<List<ItemModel>> getItems() async {
try {
Response response = await dio.get("$_apiUrl$_itemEndPoint",
options: Options(headers: {
"Accept": 'application/json',
}));
List<ItemModel> _items = List<ItemModel>();
response.data['data']?.forEach((c) {
_items.add(ItemModel.fromMap(c));
});
return _items;
} catch (e) {
throw (e);
}
}
Future getItems()异步{
试一试{
Response-Response=wait-dio.get(“$\u-apirl$\u-itemEndPoint”,
选项:选项(标题:{
“接受”:“应用程序/json”,
}));
列表_items=List();
答复.数据['data']?.forEach((c){
_items.add(ItemModel.fromMap(c));
});
退货(物品);;
}捕获(e){
投掷(e);
}
}
如何捕获基于发送和接收超时的错误?使用
Future.delayed
Future<List<ItemModel>> getItems() async {
Future.delayed(Duration(milliseconds: 500), () {
Response response = await dio.get("$_apiUrl$_itemEndPoint",
options: Options(headers: {
"Accept": 'application/json',
}));
List<ItemModel> _items = List<ItemModel>();
response.data['data']?.forEach((c) {
_items.add(ItemModel.fromMap(c));
});
return _items;
}
});
}
Future getItems()异步{
延迟(持续时间(毫秒:500),(){
Response-Response=wait-dio.get(“$\u-apirl$\u-itemEndPoint”,
选项:选项(标题:{
“接受”:“应用程序/json”,
}));
列表_items=List();
答复.数据['data']?.forEach((c){
_items.add(ItemModel.fromMap(c));
});
退货(物品);;
}
});
}
有关更多信息,请看他们的一个和他们的:
试试看{
等待Dio()。获取(“https://does.not.exist");
}关于错误捕获(e){
if(e.type==DioErrorType.connectTimeout){
// ...
}
if(e.type==DioErrorType.receiveTimeout){
// ...
}
}
您可以使用try catch for Timeout exception并根据自己的情况处理它使用dio管理超时异常:
蜂房
class ApiRepositary {
Dio dio;
ApiRepositary() {
if (dio == null) {
BaseOptions options = new BaseOptions(
baseUrl: "your base url",
receiveDataWhenStatusError: true,
connectTimeout: 60*1000, // 60 seconds
receiveTimeout: 60*1000 // 60 seconds
);
dio = new Dio(options);
}
}
Future<LoginResponse> getLoginDetails(var loginRequestData) async {
try {
Response response = await dio.post("/authenticate", data: loginRequestData);
final LoginResponse loginResponse = LoginResponse.fromJson(response.data);
return loginResponse;
}on DioError catch (ex) {
if(ex.type == DioErrorType.CONNECT_TIMEOUT){
throw Exception("Connection Timeout Exception");
}
throw Exception(ex.message);
}
}
}
您需要首先定义DIO选项:
BaseOptions options = new BaseOptions(
baseUrl: "http://example.org",
connectTimeout: 5000,
receiveTimeout: 3000,
);
然后:
Dio dio = new Dio(options);
var jsonNews = await dio.get(
'http://example.org/v2/everything?q=bitcoin&from=2020-01-24&sortBy=publishedAt&apiKey=7f3c604b6e2245c88se50lzx02dc9cac1e2');
资料来源:
伙计,receiveDataWhenStatusError对dio选项有什么作用?我读了文档,仍然不明白它是做什么的。嗨@Flux,这里你得到了errorBody响应exception.message.error这里的exception是dioException。
Dio dio = new Dio(options);
var jsonNews = await dio.get(
'http://example.org/v2/everything?q=bitcoin&from=2020-01-24&sortBy=publishedAt&apiKey=7f3c604b6e2245c88se50lzx02dc9cac1e2');