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

