【问题标题】:Unhandled Exception: SocketException flutter未处理的异常:SocketException 颤动
【发布时间】:2021-04-12 02:12:58
【问题描述】:

目标是通过电子邮件获取网站。我想在 try Catch 语句中捕获 Socket 异常,但是没有捕获到以下错误,也没有打印语句。

[VERBOSE-2:ui_dart_state.cc(177)] 未处理的异常:SocketException:主机查找失败:'subdomain.domain.com'(操作系统错误:提供节点名或服务名,或未知,errno = 8)。

遵循颤振文档herehere

这是我的代码。

import 'package:http/http.dart' as http;

Future<void> getWebsite(email) async {
    try {
      // get domain from email
      String _dom = new RegExp(r"(?<=[@]).+").stringMatch(email);
      // Get response status code from url
      final response = await http.get("https://$_dom");
      // Set Domain
      response.statusCode == 200 ? setDomain("https://$_dom") : setDomain(null);
    } on SocketException catch (_) {
      print("socket error");
    } on HttpException catch (_) {
      print("http error");
    } on FormatException catch (_) {
      print("format exception");
    } catch (e) {
      print("any exception");
    }
}

这是颤振医生 -v 的结果

[✓] Flutter(Channel master,1.22.0-10.0.pre.153,Mac OS X 10.15.5 19F101,语言环境 en-US) • Flutter 版本 1.22.0-10.0.pre.153,位于 /Users/sean/developer/flutter • 框架修订 2e643651a9(4 个月前),2020-09-11 23:07:03 -0400 • 引擎版本 16b900b63e • Dart 版本 2.10.0(构建 2.10.0-117.0.dev)

[✓] Android 工具链 - 为 Android 设备开发(Android SDK 版本 30.0.0-rc1) • Android SDK 位于 /Users/sean/Library/Android/sdk • 平台 android-29,构建工具 30.0.0-rc1 • Java 二进制文件位于:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java 版 OpenJDK 运行时环境(内部版本 1.8.0_212-release-1586-b4-5784211) • 接受所有 Android 许可证。

[✓] Xcode - 为 iOS 和 macOS 开发 (Xcode 11.3) • Xcode 位于 /Applications/Xcode.app/Contents/Developer • Xcode 11.3,内部版本 11C29 • CocoaPods 1.9.1 版

[✓] Android Studio(版本 3.6) • Android Studio 位于 /Applications/Android Studio.app/Contents • Flutter 插件版本 45.1.1 • Dart 插件版本 192.7761 • Java 版 OpenJDK 运行时环境(内部版本 1.8.0_212-release-1586-b4-5784211)

[✓] VS 代码(版本 1.52.1) • /Applications/Visual Studio Code.app/Contents 中的 VS 代码 • Flutter 扩展版本 3.18.0

[✓] 已连接设备(1 个可用)
• iPhone 11 Pro(移动) • E280A6FB-4AF7-4409-B79E-FA4E652C4FE0 • ios • com.apple.CoreSimulator.SimRuntime.iOS-13-3(模拟器)

• 未发现任何问题!

这是我在控制台中看到的

Launching lib/main.dart on iPhone 11 Pro in debug mode...
Running pod install...
Running Xcode build...
Xcode build done.                                           552.8s
Waiting for iPhone 11 Pro to report its views...
Debug service listening on ws://127.0.0.1:58043/ZgdnQH-v_BY=/ws
Syncing files to device iPhone 11 Pro...
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: SocketException: Failed host lookup: 'av.abbott.com' (OS Error: nodename nor servname provided, or not known, errno = 8)
#0      _NativeSocket.lookup.<anonymous closure> (dart:io-patch/socket_patch.dart:502:9)
#1      _rootRunUnary (dart:async/zone.dart:1198:47)
#2      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#3      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#5      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#6      Future._completeWithValue (dart:async/future_impl.dart:529:5)
#7      Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
#8      _rootRun (dart:async/zone.dart:1190:13)
#9      _CustomZone.run (dart:async/zone.dart:1093:19)
#10     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
#11     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:as<…>

【问题讨论】:

  • 你可以尝试使用http.get(...).catchError(...)
  • @kuhnroyal 它没有用。同样的错误。
  • 您能添加完整的堆栈跟踪吗,您确定错误源自那里吗?
  • 嗨 @kuhnroyal 添加了控制台输出
  • @kuhnroyal 已修复。谢谢

标签: flutter dart exception try-catch socketexception


【解决方案1】:

我改用稳定频道解决了这个问题。

https://flutter.dev/docs/development/tools/sdk/upgrading#switching-flutter-channels

颤振通道稳定

颤振升级

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2021-11-20
    • 2021-06-21
    • 2019-10-05
    • 2020-05-11
    • 2020-06-24
    • 2019-07-25
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多