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

Android Studio调用API报404 Not Found,纯Java环境可正常运行

导致Android环境下API请求返回404的可能原因及解决方向

1. setDoOutput(true) 干扰GET请求逻辑

标准Java环境中,HttpURLConnection 设置setDoOutput(true)后,GET请求可能被隐式兼容,但Android的实现逻辑会让这个设置改变请求的处理方式,导致服务器无法正确识别请求路径,返回404。

你的请求是GET方法,完全不需要开启setDoOutput(true),直接移除这行代码重试。

2. Authorization头格式不符合服务器要求

你用了Bearer email:wachtwoord的格式,这不符合标准Bearer Token规范(标准格式为Bearer <token字符串>)。如果是基础认证,正确格式应该是Basic <Base64编码的email:wachtwoord>。

普通Java环境中服务器可能做了兼容处理,但Android环境下的请求可能因为头格式错误,被服务器路由到不存在的路径。建议核对服务器的认证文档,修正头格式。

3. 网络环境/域名解析差异

  • 模拟器默认代理可能和本地Java环境不同,导致请求被转发到错误地址,可关闭模拟器代理或改用真机测试。
  • Android设备的DNS缓存可能和本地不一致,解析到错误的服务器IP,导致请求的资源不存在。

4. 冗余请求头引发服务器路由异常

GET请求不需要请求体,你设置的Content-Type: application/json和Content-Length: 0属于冗余头,可能干扰服务器的接口匹配逻辑,返回404。建议移除这两行代码:

http.setRequestProperty("Content-Type", "application/json");
http.setRequestProperty("Content-Length", "0");

调试技巧

在Android中打印完整请求信息,和标准Java环境对比,快速定位差异:

// 打印请求URL
System.out.println("Request URL: " + url.toString());
// 打印所有请求头
Map<String, List<String>> headers = http.getRequestProperties();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue().get(0));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:40:24