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

Android中使用Volley请求如何正确返回单个整数值

问题原因
  • Volley 的网络请求为异步执行逻辑,调用 requestQueue.add(stringRequest) 仅将请求加入任务队列,主线程不会等待网络请求完成再执行后续代码,因此 return vNumber 执行时 onResponse 回调还未触发,vNumber 仍为初始默认值 0。你尝试过的 SharedPreferences 存储、读取 TextView 数值等操作无法解决问题的核心原因也一致:读取数值的时机早于网络请求返回、赋值操作的执行时机。
解决方案:通过回调接口异步获取结果

自定义回调接口可以在请求完成拿到数值后再将值回传给调用方,具体实现步骤如下:

1. 自定义回调接口

public interface VersionCallback {
    // 请求成功时回调,返回拿到的版本号
    void onSuccess(int versionNumber);
    // 请求或解析出错时回调,返回异常信息
    void onError(Exception error);
}

2. 改造原有getVersionNumber方法

public void getVersionNumber(VersionCallback callback) {
    StringRequest stringRequest = new StringRequest(Request.Method.POST, GET_VERSION_NUMBER,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject object = new JSONObject(response);
                        JSONArray jsonArray = object.getJSONArray("result");
                        JSONObject jsonObject = jsonArray.getJSONObject(0);
                        int vNumber = jsonObject.getInt("version");
                        // 拿到正确值后通过回调返回
                        callback.onSuccess(vNumber);
                    } catch (JSONException e) {
                        e.printStackTrace();
                        callback.onError(e);
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    callback.onError(error);
                }
            });
    RequestQueue requestQueue = Volley.newRequestQueue(context);
    requestQueue.add(stringRequest);
}

优化提示:建议在 Application 全局初始化一次 RequestQueue 复用,避免每次调用方法都新建实例,减少性能损耗。

3. 调用方法获取版本号

getVersionNumber(new VersionCallback() {
    @Override
    public void onSuccess(int versionNumber) {
        // 此处可拿到正确的版本号,可直接执行后续业务逻辑,如更新UI、本地存储等
        Log.d("版本号获取结果", "版本号为:" + versionNumber);
    }

    @Override
    public void onError(Exception error) {
        // 此处处理请求或解析异常逻辑
        error.printStackTrace();
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:05