Android下Ktor Client调用本地服务器API(localhost/IP)失败求助
解决Android中Ktor Client调用本地服务器API的问题
针对Android模拟器的localhost访问问题
- 不要直接使用
localhost:8080,Android模拟器里的localhost指向模拟器自身,而非你的电脑本地服务器。- 若使用Android Studio自带模拟器,替换为
10.0.2.2:8080,这是模拟器映射宿主电脑localhost的特殊IP。 - 若使用Genymotion模拟器,改用
10.0.3.2:8080。
- 若使用Android Studio自带模拟器,替换为
本地IP无法访问的排查与解决
如果使用电脑本地IP(如192.168.x.x:8080)出现NoRouteToHostException,按以下步骤处理:
- 确认Android设备(或模拟器)与运行服务器的电脑处于同一Wi-Fi局域网。
- 关闭电脑防火墙,或在防火墙规则中允许服务器端口8080的入站请求,多数情况下防火墙会拦截局域网内的请求。
- 检查AndroidManifest.xml是否添加必要网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <!-- Android 9及以上,若服务器用HTTP而非HTTPS,需允许明文请求 --> <application ... android:usesCleartextTraffic="true"> ... </application> - 确认服务器监听地址不是
127.0.0.1,需改为0.0.0.0,这样服务器才能接收局域网内其他设备的请求。比如Ktor服务器配置:fun main() { embeddedServer(Netty, host = "0.0.0.0", port = 8080) { // 路由配置 }.start(wait = true) }
Ktor Client配置检查
确保Ktor Client没有多余代理或网络配置干扰请求:
val client = HttpClient(CIO) { defaultRequest { url("http://10.0.2.2:8080") // 模拟器用该地址,真机替换为电脑本地IP } }
内容的提问来源于stack exchange,提问作者Avijit Karmakar
相关产品推荐
相关产品推荐

