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

Android RecyclerView仅展示JSON返回的前2项其余数据不显示如何解决

问题原因
  • 核心错误:循环判断条件逻辑错误,当前使用for (int i = 0; i < response.length(); i++),response是JSONObject对象,它的length()返回的是JSON顶层键的数量,你的返回结果里顶层只有msg和src两个键,所以循环仅执行2次,只能拿到前2条图片数据。正确逻辑应该遍历src对应JSONArray的长度。
  • 冗余操作:JSONArray jsonArray = response.getJSONArray("src")写在循环内部,每次循环都重复读取JSONArray,无意义,应该放到循环外仅获取一次。
  • 位置错误:requestQueue.add(jsonObjectRequest)写在请求回调内部,每次请求成功都会再次把请求加入队列,会导致无限重复发请求,应该放到请求对象定义完成后的位置。
  • 性能问题:每次添加一条数据就调用sliderAdapter.notifyDataSetChanged(),可优化为所有数据添加完成后统一调用一次。
  • 额外提示:你提供的JSON返回里,src数组最后一个元素末尾多了逗号,部分低版本系统的JSON解析器可能会报错,建议后端返回时移除多余逗号。
修复后的MainActivity代码
final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, BANNER_URL, null, response -> {
    try {
        // 仅获取一次src对应的JSONArray
        JSONArray jsonArray = response.getJSONArray("src");
        // 可选:清空旧数据避免重复添加,根据业务逻辑判断是否需要
        sliderModelList.clear();
        // 循环条件改为JSONArray的长度
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);                 
            String bannerName = jsonObject.getString("banner_name");          
            sliderModelList.add(new SliderModel(bannerName));
        }
        // 所有数据加载完成后统一通知适配器刷新
        sliderAdapter.notifyDataSetChanged();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}, error -> {
    // 建议补全请求失败的处理逻辑,避免无响应
    error.printStackTrace();
});

// 请求对象定义完成后加入请求队列,不要写在回调内
requestQueue.add(jsonObjectRequest);

内容的提问来源于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:54:05