ArrayList仅保留最后一条数据重复显示问题求助
问题分析与解决:ArrayList重复显示最后一个对象
哈哈,这个坑我刚学Java的时候也踩过!你遇到的问题核心原因很明确:你在循环外部只创建了一个Countries对象,每次循环只是修改这个对象的属性,然后把同一个对象的引用重复添加到ArrayList里。
因为ArrayList存储的是对象的引用(也就是内存地址),不是对象本身。所以你循环里做的操作其实是:不断修改同一个对象的name和code,然后把这个对象的地址反复塞进集合。当循环结束时,这个唯一的Countries对象的属性是最后一次循环设置的值,所以集合里所有元素指向的都是这个对象,自然会重复显示最后一个对象的内容,次数刚好等于数组大小。
修正后的代码
你只需要把Countries对象的创建语句移到for循环内部,让每次循环都生成一个新的对象实例就行:
try{ JSONArray json = new JSONArray(sb.toString()); // 将Countries的实例化移到循环内部,每次循环都新建对象 for(int i=0; i < json.length(); i++) { Countries coun = new Countries(); JSONObject jsonObject = json.getJSONObject(i); coun.setNom((String) jsonObject.get("name")); coun.setCode((String) jsonObject.get("code")); country.add(coun); } }catch (JSONException je){ je.printStackTrace(); }; Log.i(TAG, "- - - "+ country+"- - - " ); Iterator it= country.iterator(); while (it.hasNext()){ Log.i(TAG, "- - - "+ it.next()+"- - - " ); }
这样一来,每个循环都会创建一个独立的Countries对象,每个对象都持有当前JSON元素对应的name和code,添加到ArrayList后,集合里的每个元素都是不同的引用,就能正确显示所有对象的内容啦~
内容的提问来源于stack exchange,提问作者Louis Djankou
相关产品推荐
相关产品推荐

