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

使用Volley请求JSON数据返回空对象 接口回调仍报错如何解决

问题根源

  • Volley网络请求为异步执行,loadAllData方法将请求加入队列后会立刻返回,不会等待网络请求完成,此时返回的mydata尚未完成赋值,调用就会报错。
  • 当前代码未在JsonObjectRequest的响应回调中触发自定义的DataAsyncResponse回调,无法拿到请求返回的有效结果。

修正方案

第一步 调整GetData类逻辑

去掉loadAllData的返回值,所有结果通过回调传递,同时在请求的响应回调中触发接口方法:

public class GetData{

    // 移除返回值,所有结果通过回调传递
    public void loadAllData(final DataAsyncResponse callBack){
        // 补全JsonObjectRequest的构造逻辑
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, 你的请求URL, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    // 将请求得到的JSON处理为需要的String格式后触发回调
                    String mydata = response.toString();
                    callBack.processFinished(mydata);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // 错误场景可按需通过回调通知
                    callBack.processFinished(null);
                }
            });
        AppController.getInstance().addToRequestQueue(jsonObjectRequest);
    }

    public interface DataAsyncResponse {
        void processFinished(String mydata);
    }
}

第二步 调整MainActivity调用逻辑

所有需要使用请求结果的代码必须写在processFinished回调内,不要尝试在onCreate中直接拿返回值赋值:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new GetData().loadAllData(new DataAsyncResponse() {
        @Override
        public void processFinished(String mydata) {
            // 此处的mydata才是请求完成后的有效数据
            // 所有需要用到mydata的后续逻辑全部写在此处
            if(mydata != null){
                // 执行对应操作:更新UI、解析数据、本地存储等
            }
        }
    });
}

注意事项

  • 异步请求的结果只能通过回调获取,不要尝试用成员变量存值后在回调外直接读取,大概率会读取到空值导致崩溃。
  • 如果需要先在子线程处理数据再更新UI,可在processFinished中用runOnUiThread切换到主线程操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:00:00