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

Android Volley请求API为何持续返回错误响应?

嘿,我来帮你捋捋这个Volley请求踩坑的问题!你说不管在onCreate里还是按钮点击里调用/BusinessTypes/basic端点都报错,其实Volley在onCreate里发起请求完全没问题——它本身就是异步的,不会卡主线程,问题大概率出在其他配置或者请求细节上,咱们一步步排查:

第一步:先把基础配置拉满

首先得确保你的App有网络权限,不然一切都是白搭:
在AndroidManifest.xml里加上这两个权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

如果你的API是http而非https(Android 9+默认禁止明文请求),还得加个网络安全配置:

  1. 在res/xml目录下新建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
  1. 在Manifest的application标签里引用它:
android:networkSecurityConfig="@xml/network_security_config"
第二步:检查你的Volley请求代码是否规范

给你一个标准的GET请求模板,你可以对照自己的代码找差异:

// 初始化请求队列(建议全局单例,不过临时测试也可以直接在Activity里初始化)
RequestQueue volleyQueue = Volley.newRequestQueue(this);
// 注意!这里要写完整的API地址,不要只写/BusinessTypes/basic
String apiUrl = "https://你的API域名/BusinessTypes/basic";

// 如果返回的是JSON数组,用JsonArrayRequest更方便;如果是普通字符串就用StringRequest
JsonArrayRequest businessTypesRequest = new JsonArrayRequest(
        Request.Method.GET,
        apiUrl,
        null, // 请求体,GET请求不需要就传null
        response -> {
            // 请求成功的回调,这里解析你的餐饮企业类型列表
            Log.d("VolleySuccess", "拿到数据啦:" + response.toString());
        },
        error -> {
            // 重点!这里一定要打印完整错误信息,这是排查的核心
            Log.e("VolleyError", "请求出错:" + error.getMessage());
            if (error.networkResponse != null) {
                // 打印状态码和服务器返回的错误详情
                Log.e("VolleyError", "状态码:" + error.networkResponse.statusCode);
                Log.e("VolleyError", "服务器错误信息:" + new String(error.networkResponse.data));
            }
        }
);

// 别忘了把请求加到队列里
volleyQueue.add(businessTypesRequest);

这里要注意几个细节:

  • 必须用完整的API地址,不能只写相对路径/BusinessTypes/basic
  • 如果API需要请求头(比如指定地区为英国的Accept-Language: en-GB,或者认证Token),一定要加上:
businessTypesRequest.setHeaders(new HashMap<String, String>() {{
    put("Accept-Language", "en-GB");
    // 如果需要认证,就加put("Authorization", "Bearer 你的token");
}});
第三步:先验证API本身是否可用

先别忙着调代码,用Postman或者浏览器直接访问这个API端点,看看能不能拿到正常返回:

  • 如果浏览器里都报错(比如404、401),那就是API本身的问题(比如端点不存在、需要权限),得先找API提供者确认
  • 如果浏览器能拿到数据,再回到Android代码里对比请求头、参数是否和浏览器一致
最后:根据错误日志精准定位

把错误回调里打印的日志贴出来,比如状态码是403(权限不足)、500(服务器内部错误)还是NoConnectionError(网络/权限问题),就能快速锁定问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:56:09