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

Android Studio中Volley请求场景下onCreate打印test为0而非3的原因问询

问题核心原因

你遇到的输出异常完全是Volley异步执行机制导致的,和代码逻辑错误无关,具体原因拆解如下:

  • Volley的网络请求默认在子线程执行,你调用queue.add(request)只是把请求加入请求队列,不会阻塞当前主线程的代码执行
  • onCreate方法的执行是在主线程,当你调用loadData()之后,主线程会立刻往下执行System.out.println语句,此时Volley的网络请求还没完成,onResponse回调还没被触发,test变量还保留初始值0,所以输出为0
  • 你把打印逻辑放到按钮点击回调里能输出3的原因是:点击按钮的时机远晚于Volley请求完成的时间,此时onResponse已经执行完毕,test已经被累加为3了

验证方案

你可以做个简单测试验证这个逻辑:把打印语句直接放到onResponse回调里test累加完成的代码后面,此时打印的test值必然是3:

@Override
public void onResponse(JSONObject response) {
    try {
        JSONArray jsonArray = response.getJSONArray(name of json array);
        for (int i=0;i<3;i++){
            test=test+1;
        }
        // 新增打印,此时能拿到正确值
        System.out.println("the number test in onResponse is "+test);
    } catch (JSONException e){
        e.printStackTrace();
    }
}

补充说明

如果你的后续逻辑依赖网络请求返回的结果,必须把逻辑写在onResponse回调中,或者用回调接口、LiveData之类的观察者模式实现结果通知,不能直接在启动请求的方法后面同步读取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:08