首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: DioError [DioErrorType.other]:SocketException:失败的主机查找:未被捕获

错误: DioError [DioErrorType.other]:SocketException:失败的主机查找:未被捕获
EN

Stack Overflow用户
提问于 2021-12-22 16:39:27
回答 2查看 1.9K关注 0票数 0

我用的是dio 4.0.2。问题是,当没有互联网连接时(当互联网和wifi没有打开),SocketException: Failed host lookup就不会被捕获。我通过拦截器的onError方法进行了检查,我确信它是从拦截器发送错误的。但是post请求不是为此抛出错误。

下面是我的错误代码拦截器:

代码语言:javascript
运行
复制
@override
 void onError(DioError err, ErrorInterceptorHandler handler) {
    super.onError(err, handler);
 }

我怎么能抓到这个?

EN

回答 2

Stack Overflow用户

发布于 2021-12-22 21:40:19

我就是这样用的:

代码语言:javascript
运行
复制
bool _isServerDown(DioError error) {
  return (error.error is SocketException) || (error.type == DioErrorType.connectTimeout);
  }


 @override
  Future<void> onError(DioError error, ErrorInterceptorHandler handler) async {
    if (_isServerDown(error)) {
      Response? response;
      try {
        response = await tryAnotherUrl(error.requestOptions);
      } catch (error) {
        if (error is DioError) {
          response = error.response;
          handler.next(error);
          return;
        }
      }
      if (response != null) {
        handler.resolve(response);
      } else {
        handler.next(error);
      }
      return;
    }
票数 0
EN

Stack Overflow用户

发布于 2021-12-23 08:04:56

不知道为什么,但这对我有用:

代码语言:javascript
运行
复制
  // add error interceptor to catch all errors
    dioBuilder.dio.interceptors.add(
      InterceptorsWrapper(
        onError: (error, handler) {
          // Do stuff here
          handler.reject(error); // Added this line to let error propagate outside the interceptor
        },
      ),
    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70452330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档