Flutter应用从本地localhost获取JSON数据:安卓模拟器配置求助
我之前开发的时候也踩过这个坑!安卓模拟器没办法直接用localhost访问你电脑上的本地Django服务器,得做几个关键配置调整,我一步步给你说清楚:
第一步:先确保本地Django服务器能被外部访问
别着急调模拟器,先确认你的Django服务器不是只绑定在本地回环地址上。默认的python manage.py runserver只会监听127.0.0.1,这样只有你电脑自己能访问,模拟器根本连不上。
解决方法:启动服务器的时候指定监听所有网卡:
python manage.py runserver 0.0.0.0:8000
然后在你电脑的浏览器里输入你的本地IP地址+端口(比如192.168.1.5:8000),访问你的API接口,确认能正常返回JSON数据。这一步能先排除服务器本身的问题。
第二步:安卓模拟器的特殊配置
安卓模拟器里的localhost是指向模拟器自身的,不是你的电脑,所以得用专门的映射地址:
- 如果你用的是Android Studio自带的模拟器,直接用
10.0.2.2代替localhost,这个是谷歌预设的指向宿主机(你的电脑)的地址; - 如果你用的是Genymotion模拟器,则需要用
10.0.3.2;
另外,安卓9(API 28)及以上的系统默认禁止明文HTTP请求,如果你本地服务器没配置HTTPS,得手动允许明文请求:
打开Flutter项目里的android/app/src/main/AndroidManifest.xml,在<application>标签里添加属性:
<application ... android:usesCleartextTraffic="true"> ... </application>
第三步:修改Flutter里的请求地址
把你原来的请求URL从http://localhost:8000/api/your-endpoint改成对应的模拟器地址,比如:
// Android Studio模拟器用这个 final response = await http.get(Uri.parse('http://10.0.2.2:8000/api/your-endpoint'));
如果用Dio库的话,同理替换baseUrl:
final dio = Dio(BaseOptions(baseUrl: 'http://10.0.2.2:8000/api/'));
额外排查小技巧
- 检查电脑防火墙:有时候防火墙会挡住模拟器的请求,暂时关闭防火墙测试一下,如果能连上了,就给8000端口添加入站规则;
- 跨域问题:如果Django返回跨域错误,安装
django-cors-headers,然后在settings.py里配置允许所有来源(开发环境没问题):INSTALLED_APPS = [ ... 'corsheaders', ... ] MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ] CORS_ALLOW_ALL_ORIGINS = True - 真机测试的话:确保手机和电脑在同一个WiFi下,用电脑的本地IP(比如
192.168.1.5)代替10.0.2.2就行。
内容的提问来源于stack exchange,提问作者Omar Mohamed
相关产品推荐
相关产品推荐

