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

处理WP Rest Api返回null数据时的For循环异常问题

解决ListView图片列表元素错位的问题

我来帮你搞定这个元素顺序错位的问题!核心问题在于你当前的代码只在有图片的时候才往列表里添加元素,一旦遇到better_featured_image为null的条目,对应位置就会空缺,后面的元素自动往前补位,自然就和API返回的顺序对不上了。另外还有个小问题:你每次循环都重新解析一遍整个JSON数组,这完全是多余的,会浪费性能。

下面是修改后的代码,我会标注关键修改点:

JSONArray jarr = new JSONArray(json);
if(jarr.length() > 0){
    List<String> listImage = new ArrayList<>();
    for(int i = 0; i < jarr.length(); i++){
        // 关键修改1:复用已创建的jarr,避免重复解析JSON
        JSONObject job = jarr.getJSONObject(i);
        // 关键修改2:不管有没有图片,都要在对应索引位置添加元素
        if(job.has("better_featured_image") && !job.isNull("better_featured_image")){
            // 存在非null的特色图片,存入URL
            String imageUrl = job.getJSONObject("better_featured_image")
                                .getJSONObject("media_details")
                                .getJSONObject("sizes")
                                .getJSONObject("medium")
                                .getString("source_url");
            listImage.add(i, imageUrl);
        } else {
            // 特色图片为null,存入null值占位
            listImage.add(i, null);
        }
    }
    // 关键修改3:循环结束后再转换为数组,避免循环内无效操作
    String[] image = listImage.toArray(new String[listImage.size()]);
}

关键修改说明:

  • 复用JSONArray:直接使用一开始创建的jarr获取JSONObject,不用每次循环都重新解析整个JSON字符串,提升效率。
  • 强制占位:每个循环迭代都往listImage的对应索引位置添加元素,有图片存URL,无图片存null,确保列表长度和API返回的条目数一致,顺序完全匹配。
  • 优化数组转换:把数组转换逻辑移到循环外面,等所有元素处理完成后再执行,避免循环内重复创建数组的无效操作。

这样修改后,listImage里的元素顺序就会和WP REST API返回的条目顺序完全一致,遇到无特色图片的条目时,对应位置会保留null值,不会出现错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:05