我正在Flutter中创建一个移动的应用程序,并在物理设备(Android)上进行测试。我在本地的wamp服务器上运行我的API。当我把路由设置为失眠时,它会工作并返回一个JSON。然而,当我尝试从这个路由在我的Flutter应用程序。这给了我一个错误:
。
final httpResponse = await http.get(Uri.parse('$_baseUrl/motorlocations'));
我试过:
http://127.0.0.1:80/..。
http://localhost:80/...
http://10.0.2.2:80/..。
http://myIPV4:80/...
=>如果你看图片,端口是42794,而我输入端口80。
我试过这个命令:adb -d reverse tcp:42794 tcp:80 (80)
但它不工作。
3条答案
按热度按时间ndh0cuux1#
如果使用print _baseUrl,会看到什么?
dbf7pr2w2#
您遇到的问题与您的Android设备尝试连接到本地服务器的方式有关。当您使用http://localhost、
http://127.0.0.1
或http://10.0.2.2
时,Android模拟器将这些解释为对模拟器自己的Android网络接口的引用,而不是对主机的本地服务器的引用。这就是为什么您会看到不同的端口号。要解决此问题,您可以使用主机的IP地址。请按照以下步骤操作:
1.查找您的主机的本地IP地址。您可以在命令提示符下使用命令
ipconfig
(在Windows上)或ifconfig
(在macOS或Linux上)来查找它。查找IPv4地址(例如192.168.1.x
)。1.在Flutter应用程序的代码中使用此IP地址:
1.将Internet权限添加到manifest.xml
final String baseUrl = 'http://your_host_machine_ip:80';
final httpResponse = await http.get(Uri.parse('$baseUrl/yourAPI'));
fcg9iug33#
**谢谢大家的意见!我找到解决办法了
在我的防火墙Windows中,我创建了一个规则,以打开端口80。然后,在文件httpd-vhosts.conf中,我将“Requirelocal”更改为“Requireallgranted”。此外,我在代码中使用了ipv4地址。