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

使用AsyncHttpClient发送GET请求未触发onSuccess/onFailure方法求助

为什么AsyncHttpClient的GET请求既不触发onSuccess也不触发onFailure?

我来帮你梳理下可能的原因——毕竟Postman能正常请求但代码里两个回调都没动静,大概率是客户端这边的配置、环境或者代码细节出了问题,结合你的代码和场景,常见的情况有这些:

  • 网络权限与明文HTTP限制
    首先检查AndroidManifest.xml:

    1. 有没有添加互联网权限?没加的话请求根本发不出去:
      <uses-permission android:name="android.permission.INTERNET"/>
      
    2. 如果你的targetSdkVersion >=28,默认是禁止明文HTTP请求的(你的URL是http://开头),需要在res/xml里创建network_security_config.xml,添加允许明文请求的配置,然后在Manifest的application标签里引用:
      <application
          ...
          android:networkSecurityConfig="@xml/network_security_config">
      
      network_security_config.xml内容:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <base-config cleartextTrafficPermitted="true" />
      </network-security-config>
      
  • Activity生命周期冲突
    你是在JourneyDetails这个Activity里发起的请求吧?如果请求还没完成,用户就退出了Activity(比如按返回键、切到其他App),AsyncHttpResponseHandler因为持有Activity的强引用,可能会被系统回收或者取消回调,导致两个方法都不触发。
    解决办法可以用WeakReference包装Activity,或者改用更稳定的异步方案(比如OkHttp+Coroutines,生命周期绑定更灵活)。

  • 超时时间过短
    AsyncHttpClient的默认超时可能不够长,如果你的接口响应较慢,请求还在等待状态,自然不会触发回调。可以手动设置超时时间:

    AsyncHttpClient client = new AsyncHttpClient();
    client.setConnectTimeout(10000); // 10秒连接超时
    client.setReadTimeout(10000); // 10秒读取超时
    
  • 缺少详细错误日志
    你的onFailure方法只打印了状态码,但很多时候错误的详细信息才是关键。修改一下onFailure,打印Throwable的完整信息:

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
        Log.d("ERROR STATUS:", " " + statusCode);
        Log.e("ERROR DETAIL:", error.getMessage(), error); // 打印错误栈,定位问题
    }
    

    比如如果是SSL验证失败、连接超时,这里会给出明确提示。

  • 请求拦截或重定向问题
    有些服务器会做重定向,AsyncHttpClient默认可能没开启自动跟随重定向,可以手动设置:

    client.setFollowRedirects(true);
    

    另外也可以开启AsyncHttpClient的日志功能,查看请求的完整流程:

    client.setLoggingLevel(AsyncHttpClient.LoggingLevel.BODY);
    

    这样能看到请求头、响应头、响应体的详细内容,判断请求是否真的发出去了,以及服务器返回了什么。

  • URL编码问题
    如果你的URL里包含特殊字符(比如空格、中文),Postman会自动编码,但代码里直接使用未编码的URL会导致请求失败。可以对URL的参数部分进行编码(注意不要编码整个URL):

    // 示例:如果URL有参数name=张三,编码参数值
    String encodedParam = URLEncoder.encode("张三", "UTF-8");
    String URL = "http://link/link1/link2?name=" + encodedParam;
    

先从权限和明文HTTP的问题排查起,这是最常见的原因,然后通过日志逐步定位,应该能找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:45