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

Volley JsonArrayRequest请求异常:始终触发onError()问题求助

解决Volley JsonArrayRequest始终触发onError()的问题

我之前也踩过Volley请求一直走错误回调的坑,结合你的代码和描述,咱们一步步排查和解决:

1. 先修正URL的编码问题

你的请求URL里用了&,这是HTML的转义字符,Volley无法识别,会导致请求地址无效。把&替换成普通的&即可:

String correctUrl = "http://api.aladhan.com/v1/timingsByCity?city=Dubai&country=United%20Arab%20Emirates";

2. 检查Android明文HTTP限制(Android 9+)

从Android 9开始,系统默认禁止明文HTTP请求,只允许HTTPS。如果你的接口是HTTP的,需要配置允许明文访问:

  • 在res/xml目录下创建network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">api.aladhan.com</domain>
    </domain-config>
</network-security-config>
  • 然后在AndroidManifest.xml的application标签里添加引用:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

3. 排查错误详情,精准定位问题

在onErrorResponse里打印错误的具体信息,比如状态码、错误描述,这能帮你快速知道是连接问题、服务器错误还是参数错误:

@Override
public void onErrorResponse(VolleyError error) {
    if (error.networkResponse != null) {
        Log.e("VolleyDebug", "状态码: " + error.networkResponse.statusCode);
        Log.e("VolleyDebug", "响应内容: " + new String(error.networkResponse.data));
    }
    Log.e("VolleyDebug", "错误信息: " + error.getMessage());
}

4. 确保上下文和请求队列的有效性

  • 初始化RequestQueue时,尽量用Application上下文(避免内存泄漏):
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
  • 如果是在Fragment中调用,确保用getActivity()作为上下文,不要直接用Fragment的this。

5. 再次确认网络权限

虽然你说已经添加,但再检查下AndroidManifest.xml里的权限是否放在根标签下(不是application内部):

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

最后给你整理好的完整请求代码:

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
String url = "http://api.aladhan.com/v1/timingsByCity?city=Dubai&country=United%20Arab%20Emirates";

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
        new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {
                    // 在这里处理你的JSON解析逻辑
                    for (int i = 0; i < response.length(); i++) {
                        JSONObject obj = response.getJSONObject(i);
                        // 提取数据...
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // 打印错误信息排查
                if (error.networkResponse != null) {
                    Log.e("VolleyDebug", "状态码: " + error.networkResponse.statusCode);
                    try {
                        Log.e("VolleyDebug", "响应内容: " + new String(error.networkResponse.data, "UTF-8"));
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                Log.e("VolleyDebug", "错误信息: " + error.getMessage());
            }
        });

requestQueue.add(jsonArrayRequest);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:02