Flutter中MySQL数据下拉列表在安卓手机无法运行求助
问题分析与解决方案
你遇到的核心问题是Flutter应用在本地模拟器能正常访问后端接口,但安卓真机无法连接,即便替换IP也无效,这通常是网络配置、权限或后端服务绑定的问题,以下是针对性解决步骤:
1. 添加安卓网络权限
安卓默认禁止应用访问网络,需在android/app/src/main/AndroidManifest.xml中添加权限,放在<manifest>标签内、<application>标签外:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. 确保设备同局域网且IP正确
- 确认安卓手机和运行PHP后端的笔记本连接同一个WiFi网络
- 查看笔记本的局域网IP(Windows用
ipconfig,Mac/Linux用ifconfig或ip addr),比如192.168.1.100 - 将代码中的URL替换为该IP:
var url = Uri.parse("http://192.168.1.100/dropdown_pratice/select.php");
3. 修改PHP服务器绑定地址
若PHP服务器(如XAMPP/WAMP)仅绑定127.0.0.1,外部设备无法访问:
- 打开Apache的
httpd.conf文件,找到Listen 127.0.0.1:80,改为Listen 0.0.0.0:80(允许所有IP访问) - 重启Apache服务,确保后端服务可被局域网设备访问
4. 解决安卓9+明文网络限制
安卓9及以上默认禁止HTTP明文请求,需配置网络安全策略:
- 在
android/app/src/main/res/xml目录下创建network_security_config.xml文件:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
- 在
AndroidManifest.xml的<application>标签中添加配置:
android:networkSecurityConfig="@xml/network_security_config"
5. 检查笔记本防火墙设置
确保笔记本防火墙允许80端口(或PHP服务器使用的端口)的入站连接,否则真机无法请求后端接口。
额外代码优化建议
- 给
categoryItemList指定类型,避免类型不安全:List<Map<String, dynamic>> categoryItemList = []; - 增加接口请求失败的处理逻辑:
if (response.statusCode == 200) { // 现有逻辑 } else { print("请求失败,状态码:${response.statusCode}"); }
内容的提问来源于stack exchange,提问作者Muhammad Ali
相关产品推荐
相关产品推荐

