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

