Flask+Kotlin Retrofit无法通过IP访问API接口报127.0.0.1连接失败
问题排查与解决方案
1. 解决请求地址不匹配问题
你当前报错显示应用实际请求的是127.0.0.1:5000,和你代码中配置的192.168.0.185:3000完全不一致,属于旧代码缓存未清理导致的问题:
- 打开Android Studio,点击
File → Invalidate Caches - 勾选
Clear file system cache and local history,点击Invalidate and Restart重启编辑器 - 重新编译项目运行,确保新的BASE_URL配置生效
2. 修正Retrofit BaseUrl格式
Retrofit要求BaseUrl末尾必须加斜杠,否则拼接接口路径时会出现地址错误:
修改Constants.kt中的BASE_URL为:
const val BASE_URL = "http://192.168.0.185:3000/"
如果是模拟器访问,改为:
const val BASE_URL = "http://10.0.2.2:3000/"
3. 配置安卓明文网络权限
安卓9及以上版本默认禁止HTTP明文请求,你使用的HTTP协议需要额外配置许可:
- 在
res/xml目录下新建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- 实体机访问局域网服务配置 --> <domain includeSubdomains="true">192.168.0.185</domain> <!-- 模拟器访问本地服务配置 --> <domain includeSubdomains="true">10.0.2.2</domain> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的application标签中添加属性:
<application ... android:networkSecurityConfig="@xml/network_security_config">
4. 解决实体机访问失败问题
你提到模拟器已经可以正常访问,实体机访问失败优先排查局域网限制:
- 关闭运行Flask服务的电脑的系统防火墙,或者在防火墙入站规则中开放3000端口的TCP访问权限
- 确认手机和电脑连接的是同一个WiFi,且路由器没有开启AP隔离功能
- 先在手机自带浏览器中访问
http://192.168.0.185:3000/adamapi,确认可以正常拿到返回数据后再测试应用
内容的提问来源于stack exchange,提问作者yras8
相关产品推荐
相关产品推荐

