You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中OkHttpClient始终调用onFailure,模拟器无法访问URL问题排查

Android模拟器无法访问URL、真机正常的问题排查方案

先把你提供的代码格式化一下,方便查看:

HttpUrl.Builder httpBuider = HttpUrl.parse("some url here").newBuilder(); 
httpBuider.addQueryParameter("email", email); 
httpBuider.addQueryParameter("password", password); 
OkHttpClient httpClient = new OkHttpClient(); 
Request request = new Request.Builder()
    .url(httpBuider.build())
    .build(); 
httpClient.newCall(request).enqueue(new Callback() { 
    // ... 
    public void onFailure() {...} 
    // ...
});

从你描述的情况来看,模拟器报错但真机正常,大概率是两者的网络环境差异导致的,我整理了几个常见的排查方向:

  • 本地服务器地址适配问题
    如果你的目标URL是本地开发服务器(比如http://localhost:8080或者http://127.0.0.1:8080),模拟器的localhost指向的是它自身的虚拟机,不是你的电脑主机。这时需要把地址换成电脑的局域网IP(比如http://192.168.x.x:8080),或者针对Android Studio自带的模拟器,用专用地址http://10.0.2.2:8080来访问电脑主机的服务。

  • Android 9+的明文HTTP限制
    从Android 9(API 28)开始,系统默认禁止应用使用明文HTTP请求,只能用HTTPS。如果你的目标URL是HTTP协议,模拟器会直接拦截请求触发onFailure,而有些真机可能因为系统版本较低或者用户手动关闭了安全限制可以正常访问。解决方法:

    1. 在res/xml目录下创建network_security_config.xml,内容如下:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <base-config cleartextTrafficPermitted="true" />
      </network-security-config>
      
    2. 在AndroidManifest.xml的<application>标签中添加属性:android:networkSecurityConfig="@xml/network_security_config"
  • 模拟器网络代理配置错误
    检查模拟器的网络代理设置:打开模拟器的「设置」→「网络和互联网」→「Wi-Fi」,长按当前连接的网络选择「修改网络」,查看代理设置是否为「无」。如果设置了手动代理但代理不可用,会直接导致请求失败。

  • 电脑防火墙/杀毒软件拦截
    电脑上的防火墙或者杀毒软件可能会阻止模拟器发起的网络请求,而真机处于独立网络环境不受影响。可以暂时关闭防火墙或杀毒软件测试,如果能正常访问,再把模拟器的网络请求加入白名单。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:14