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
相关产品推荐
相关产品推荐

