我正在 Flutter 中创建一个移动应用程序,并在物理设备(Android)上进行测试。我在本地的 wamp 服务器上运行我的 API。当我将路由置于失眠状态时,它会起作用并返回给我一个 JSON。然而,当我在我的 Flutter 应用程序中尝试这条路线时。这给了我一个错误。。
final httpResponse = await http.get(Uri.parse('$_baseUrl/motorlocations'));
我尝试过: http://127.0.0.1:80/..。 http://本地主机:80/... http://10.0.2.2:80/...
http://myIPV4:80/... => 如果你看图片,端口是 42794,而我输入的是端口 80。
我尝试过这个命令:adb -d 反向 tcp:42794 tcp:80 (80) 但它不起作用。
如果打印 _baseUrl,你会看到什么?
您遇到的问题与您的 Android 设备尝试连接到本地服务器的方式有关。当您使用 http://localhost、
http://127.0.0.1
或 http://10.0.2.2
时,Android 模拟器会将这些解释为对模拟器自己的环回网络接口的引用,而不是对主机的本地服务器的引用。这就是您看到不同端口号的原因。
要解决此问题,您可以改用主机的 IP 地址。请按照以下步骤操作:
查找主机的本地 IP 地址。您可以使用命令提示符中的
ipconfig
(在 Windows 上)或 ifconfig
(在 macOS 或 Linux 上)来查找它。查找 IPv4 地址(例如,192.168.1.x
)。
在 Flutter 应用程序的代码中使用此 IP 地址:
最终字符串baseUrl = 'http://your_host_machine_ip:80';
最终httpResponse =等待http.get(Uri.parse('$baseUrl/yourAPI'));