2014-07-09 49 views
0

加入后HashMap中值我有这个ArrayList和另一个用于HashMap的不允许改变的ArrayList

ArrayList<HashMap<String, String>> agentList = new ArrayList<HashMap<String, String>>(); 
HashMap<String, String> agentproperty = new HashMap<String, String>(); 

我收到jArray从PHP文件。并试图使用hashmap将其放入数组中。

JSONArray jArray = jsonObj.getJSONArray(TAG_AGENT); 
     String id = null; 
     String name = null; 

     for (int i = 0; i < jArray.length(); i++) { 
      JSONObject a = jArray.getJSONObject(i); 
      id = a.getString(TAG_AGENTID); 
      name = a.getString(TAG_NAME); 

      agentproperty.put("AGENTID", id); 
      agentproperty.put("NAME", name); 

      Log.d("id",id); 
      Log.d("name",name); 
      agentList.add(agentproperty); 


    } 
       Log.d("firstperson",String.valueOf(agentList.get(0))); 
       Log.d("secondperson",String.valueOf(agentList.get(1))); 

我能得到

id 1, hame cathy; id 2, name john 

为内循环日志。但从最后的日志中,我得到

id 2,name john; id 2,name john 即使在添加arraylist后,agentproperty的值似乎也会改变。 我试过了agentList.add(agentproperty);循环之外。没有工作。只插入最后一个值(id 2,名称john)。任何想法如何填充这个数组与我从循环获得的所有值。我将需要在listview中使用agentList。

+0

化妆内确定你有独特的身份证号码 –

回答

0

移动

HashMap<String, String> agentproperty = new HashMap<String, String>(); 

for

+0

谢谢。有效。这是一个小问题。但是头脑清醒。 – userabc55478

1

是的。你必须创建HashMap在每次迭代的新实例,否则你将覆盖值对于给定的关键,如果一个条目已经存在

+0

你能更清楚吗? – userabc55478

+0

在每次迭代中,您都覆盖“AGENTID”和“NAME”的值,因为这是HashMap的工作方式。如果它确实检查它是否有钥匙的入口。如果有,只需用你提供的最后一个值替换,否则它会创建一个新条目。 – Blackbelt

+0

优秀内部循环实例,这是什么要求。谢谢 – userabc55478

相关问题