Dav*_*vid 9 android http socketexception dart flutter
每当我尝试在大约20秒后执行http呼叫时,都会在控制台中出现以下错误:
E/flutter ( 8274): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 8274): SocketException: Failed host lookup: 'flutter-project-xxxxx.firebaseio.com' (OS Error: No address associated with hostname, errno = 7)
Run Code Online (Sandbox Code Playgroud)
我通过应用程序http包调用的每种方法和每种路由都会发生此错误。
我正在使用Android Studio中的AVD虚拟设备在Windows上开发Flutter应用程序。
版本:http:^ 0.12.0 + 1抖动:1.0
情况:
在家中或通过手机进行网络共享:在虚拟设备的每个部分都可以正常连接
从我的工作网络(在防火墙之后):
只有使用Android Web View,我才能毫无问题地浏览互联网(我什至可以调用代码中使用的相同URL,它也可以工作)。在测试我的应用程序时,在虚拟设备中使用任何其他应用程序(Chrome,Google Play,ecc ...),特别是“ SocketException”时,出现连接错误。
该应用发出的呼叫之间有什么区别?有没有一种方法可以路由我的应用程序调用,就像在网络视图中一样?
谢谢!
Ume*_*qas 41
确保您已经添加了android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
小智 18
尝试添加<uses-permission android:name="android.permission.INTERNET" />到您的AndroidManifest.xml文件中。
Nai*_*lah 16
您应该尝试以下操作:
尝试在调试模式下运行应用程序,如果它工作正常并且在发布模式下无法工作,那么它可能与权限问题有关,因此在清单文件中添加权限(INTERNET,ACCESS_NETWORK_STATE)。
如果不包含则添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
如果它在调试模式下不起作用,请通过点击邮递员来检查您的网址是否正确。如果它在邮递员中工作,那么你应该以这种方式执行你的网络服务:
在 pubspec.yaml 中添加依赖项:
dependencies:
flutter:
sdk: flutter
http: 0.13.3
Run Code Online (Sandbox Code Playgroud)
添加 http:0.13.3 后,单击 Pub get 按钮,如果执行代码为 0,则表示已成功添加到您的项目中。
在你的 dart 文件中导入 http.dart:
import 'package:http/http.dart';
Run Code Online (Sandbox Code Playgroud)
现在编写以下代码来执行Web服务:
var url = Uri.parse('some-url-login?username=abc&&password=xyz');
var response = await get(url, headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods':
'GET,PUT,POST,DELETE'
});
if (response.statusCode == 200) {
// success
} else if(response.statusCode == 404){
// not found
} else if(response.statusCode == 500){
// server not responding.
} else {
// some other error or might be CORS policy error. you can add your url in CORS policy.
}
Run Code Online (Sandbox Code Playgroud)
我希望它能帮助你。寒意!
小智 13
转到 AVD 管理器,然后选择您的模拟器,在操作菜单上单击向下选项符号,然后选择擦除数据,然后重新启动模拟器。这个对我有用。
Ish*_*dra 10
添加互联网许可不仅是解决方案。
您还必须确保您在线,无论是移动设备还是模拟器
确保您在线,无论它是移动设备还是仿真器
确保您已在应用的android / app / src / main / AndroidManifest.xml中授予互联网许可
<uses-permission android:name="android.permission.INTERNET"/>
即使我也有同样的问题。我重新启动了模拟器,它成功了!
就我而言,我在将 WIFI 连接到系统之前打开了模拟器。当网络(WIFI)已连接到我的系统但无法连接到模拟器时。由于模拟器无法访问互联网,因此出现此问题。我通过这种方式解决了此问题。
解决方案:
连接网络访问系统然后我关闭模拟器并重新打开它。安装应用程序,运行应用程序并打开它。最后,每个 API 都能正常工作。
如果您使用的是模拟器,请确保移动数据处于活动状态
如果您在使用插件时遇到此错误,请不要忘记在尝试订阅之前flutter_socket_io初始化套接字。socketIO.init(); socketIO.connect();当我忽略它时,我收到了与上面指出的相同的错误。
| 归档时间: |
|
| 查看次数: |
5339 次 |
| 最近记录: |