You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Retrofit仅模拟器可连本地服务器,真机连接失败求助

解决Android真机无法连接本地服务器的问题

我来帮你排查下这个问题,模拟器能正常请求但真机不行,通常是网络环境或者权限配置的问题,咱们一步步来:

1. 确认设备处于同一局域网

  • 首先要确保你的Android真机和搭建服务器的电脑连接的是同一个Wi-Fi网络(别一个连Wi-Fi一个连有线,或者分属不同子网)。
  • 再仔细核对本机IP:用电脑的ipconfig(Windows)或ifconfig(Mac/Linux)查看当前Wi-Fi网卡的IP,绝对不能用本地回环地址127.0.0.1,也别搞错成以太网的IP。

2. 检查电脑防火墙设置

  • Windows系统:打开「Windows Defender防火墙」,找到「允许应用通过防火墙」,确保你的服务器程序(比如Tomcat、Node服务等)已经被允许在专用和公用网络中通行;也可以临时关闭防火墙测试,要是能连上了,再去配置规则放行服务器端口。
  • Mac/Linux:同样检查系统防火墙,确保服务器监听的端口(比如8080、3000这类)已经对外开放。

3. 验证端口是否能被真机访问

  • 直接在真机的浏览器里输入 http://你的电脑IP:服务器端口 测试,比如http://192.168.1.100:8080。如果浏览器也打不开,那说明和Retrofit无关,是网络或服务器端口开放的问题。
  • 如果浏览器能打开但Retrofit不行,再往下看配置问题。

4. 完善AndroidManifest配置

  • 先确认你已经添加了必要的网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 针对Android 9及以上版本(API 28+),系统默认禁止明文HTTP请求,如果你的服务器用的是HTTP而非HTTPS,必须在<application>标签里添加android:usesCleartextTraffic="true"
    <application
        ...
        android:usesCleartextTraffic="true">
        ...
    </application>
    

5. 核对Retrofit的BaseUrl配置

  • 确保BaseUrl是真机能访问的正确地址,比如:
    val retrofit = Retrofit.Builder()
        .baseUrl("http://192.168.1.100:8080/") // 末尾记得加斜杠
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    
    别用localhost或者10.0.2.2(这个是模拟器访问本机的特殊地址,真机完全不适用)。

6. 其他可能的坑

  • 有些路由器有「AP隔离」功能,开启后同一Wi-Fi下的设备不能互相访问,去路由器后台看看有没有开这个功能,有的话关掉试试。
  • 检查服务器监听地址:如果服务器只绑定了127.0.0.1,那只有本机能访问,其他设备连不上。比如Node.js服务要确保监听0.0.0.0,而不是默认的localhost

按照上面的步骤排查,应该能解决大部分问题啦。

内容的提问来源于stack exchange,提问作者user7128116

火山引擎 最新活动