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

