2014-07-09 73 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

相關問題