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

JSONArray含3个JSONObject,但ListView仅加载1个对象的问题求助

嘿,我来帮你排查这个问题!这种情况通常是代码里的循环遍历、数据处理或者Adapter环节出了小疏漏,咱们一步步来梳理可能的原因:

常见排查方向

1. JSONArray遍历逻辑出错

最容易踩坑的就是循环只执行了一次,比如不小心在循环里加了return/break,或者循环条件写错了(比如把i < jsonArray.length()写成了i == 0)。

正确的遍历+解析逻辑应该是这样的,你可以对比下自己的代码:

JSONArray jsonArray = ...; // 你的目标JSONArray
List<YourDataModel> dataList = new ArrayList<>();

// 确保循环覆盖所有元素
for (int i = 0; i < jsonArray.length(); i++) {
    try {
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        // 把JSON数据解析到你的数据模型类
        YourDataModel item = new YourDataModel();
        item.setName(jsonObj.getString("name"));
        item.setContent(jsonObj.getString("content"));
        // ...其他字段解析
        
        dataList.add(item); // 关键:每个解析后的对象都要加入列表
    } catch (JSONException e) {
        e.printStackTrace();
        // 如果这里有异常,要确认是不是某个JSONObject解析失败导致被跳过了
    }
}

// 最后把完整的列表传给Adapter
yourListView.setAdapter(new YourCustomAdapter(dataList));

2. Adapter数据源或方法异常

确认传给Adapter的列表确实有3个元素,可以在设置Adapter前加个日志验证:

Log.d("DataCheck", "当前数据列表大小:" + dataList.size());
  • 如果日志显示大小是1:问题出在数据解析环节,要么循环没跑全,要么部分对象解析失败被跳过了
  • 如果日志显示大小是3:那大概率是Adapter的getCount()方法写错了(比如硬返回1),或者getView()里的逻辑有问题,比如每次都绑定同一个数据,没有根据position取对应元素

3. ListView布局显示问题

有没有可能你的Item布局根视图高度设成了match_parent?这样第一个Item就会占满整个屏幕,后面的Item被完全挡住,看起来像是只加载了一个。检查下Item布局的根布局高度是不是wrap_content。

4. JSON数据本身的隐性问题

虽然你说JSONArray有3个JSONObject,但最好打印原始JSON字符串确认:

Log.d("RawJSON", jsonArray.toString());

看看是不是其中某个JSONObject是空的,或者字段格式不符合预期,导致解析时被异常捕获后跳过,最终列表里只留下了能正常解析的对象。

要是能把你的解析代码和Adapter核心代码贴出来,我能更精准地帮你定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:31:37