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

Volley的JsonObjectRequest响应监听器不触发无报错如何解决

问题排查及解决方法
  • 首先补全网络权限,在AndroidManifest.xml中添加网络访问权限,缺少该权限时网络请求会直接静默失败:
<uses-permission android:name="android.permission.INTERNET" />
  • 补全onErrorResponse的错误日志打印,原代码中错误回调是空实现,自然捕获不到任何报错信息,修改如下:
new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("VOLLEY_ERROR", error.toString());
        // 可额外打印响应码排查服务端错误
        if (error.networkResponse != null) {
            Log.e("ERROR_CODE", String.valueOf(error.networkResponse.statusCode));
        }
    }
}
  • 给请求添加超时重试策略,Volley默认超时时间较短,弱网环境下容易请求失败无回调:
// 在requestQueue.add(jsonObjectRequest);之前添加以下代码
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
    10000, // 10秒超时
    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
));
  • 检查测试设备/模拟器的网络连通性,直接在设备浏览器中访问请求URL,确认可以正常拿到返回数据。
  • 避免异步逻辑误区:Volley请求是异步执行的,FetchAPI_Data方法调用完成时请求还没返回,不要在调用该方法后立刻读取dcritical等全局变量,变量赋值操作只有在onResponse触发后才会执行,如果需要拿到数据后更新UI,请在onResponse内部执行UI更新逻辑。
  • 可优化冗余代码:response本身就是JSONObject类型,不需要再通过new JSONObject(response.toString())重新创建对象,直接调用response.getString("xxx")即可。
  • 可尝试移除URL末尾的斜杠,调整为String url = "https://corona.lmao.ninja/v2/all";,避免部分服务端路由规则不兼容后缀斜杠的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:36:06