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

Android解析POST请求返回的JSON响应仅获取前两项如何解决?

问题根因

你的代码的核心错误是循环边界取值错误:

  • 你用i < response.length()作为循环终止条件,而response是接口返回的JSONObject对象,它的length()方法返回的是对象包含的顶级键值对数量,你的接口返回的顶级键只有msg和src2个,所以循环只会执行2次,自然只能取到src数组的前2条数据。
  • 你打印的OBJ Size是每个src子对象的键数量(每个子对象包含id、banner_name、user_id、created_at、updated_at共5个键),这个值是对的,和循环次数无关。

另外你的代码存在不必要的性能损耗:每次循环都重复调用response.getJSONArray("src")获取数组,只需要在循环外获取一次即可。

修复后代码
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, BANNER_URL, null, response -> {
    try {
        // 提前取出src数组,避免循环内重复取值
        JSONArray jsonArray = response.getJSONArray("src");
        // 循环边界改为src数组本身的长度,遍历所有元素
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Log.e("OBJ Size", String.valueOf(jsonObject.length()));
            String bannerName = jsonObject.getString("banner_name");
            Log.e("BNAME", bannerName);
            sliderModelList.add(new SliderModel(bannerName));
        }
        // 所有数据加载完成后统一刷新列表,减少不必要的渲染
        sliderAdapter.notifyDataSetChanged();
    } catch (JSONException e) {
        e.printStackTrace();
        Log.e("JSONException", e.getLocalizedMessage());
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:57:03