2013-04-14 23 views
0
List <Response> Data = new ArrayList <Response>(); 
Response object = null; 

JSONObject documentRoot = new JSONObject(result); 
JSONArray documentChild = documentRoot.getJSONArray("Main"); 
JSONArray allergyArray = null; 
JSONArray vitalsArray = null; 

for (int i = 0; i < documentChild.length(); i++) { 
    child = documentChild.getJSONObject(i); 
    if (Condition1) { 
     allergyArray = child.getJSONArray("Allergy"); 
    } else if { 
     vitalsArray = child.getJSONArray("Vitals"); 
    } 
} 

object = new Response(); // POJO class 

if (null != allergyArray) { 
    for (int i = 0; i < allergyArray.length(); i++) { 
     object.setCap(allergyArray.getJSONObject(i).getString("Cap")); 
     object.setRea(allergyArray.getJSONObject(i).getString("Rea")); 
    } 
} 

if (null != vitalsArray) { 
    for (int i = 0; i < vitalsArray.length(); i++) { 
     object.setName(vitalsArray.getJSONObject(i).getString("Name")); 
     object.setMedic(vitalsArray.getJSONObject(i).getString("Medic")); 
    } 
} 

Data.add(object); 

當我嘗試迭代並打印結果時,只有最後添加的項目被打印。只有最後添加的項目被打印

public void onLoadComplete(List <Response> item) {  
    for (int i = 0; i < item.size(); i++) { 
     Log.d("Get", item.get(i).getCap()); // I get only the last item which is added. 
    }  
} 

爲什麼我的List對象傳遞給onLoadComplete函數只包含添加到POJO類的最後一個項目。

+1

Java是面向對象,不像PHP那樣程序化。你需要每次創建一個新的'Response'實例,而不是重複使用同一個實例。 – BalusC

+0

@BalusC:我試圖在相應的for-loops中創建新的實例... object = new Response(); – Kevin

+1

您必須創建新的'Response',然後調用'Data.add(object);',所有這些都在'for'循環中。 – acdcjunior

回答

1

在循環中,您可以在每次迭代中對同一個對象設置值(cap,rea,name & medic),這意味着只有最後一個值將在迭代完成後設置。

對於您需要創建一個新對象的每個值。這是一個基本的例子,爲了安全需要添加一些檢查:

if (null != allergyArray && null != vitalsArray) 
{ 
    for (int i = 0; i < allergyArray.length() && i < vitalsArray.length(); ++i) 
    { 
     object = new Response(); // POJO class 
     object.setCap(allergyArray.getJSONObject(i).getString("Cap")); 
     object.setRea(allergyArray.getJSONObject(i).getString("Rea")); 
     object.setName(vitalsArray.getJSONObject(i).getString("Name")); 
     object.setMedic(vitalsArray.getJSONObject(i).getString("Medic")); 

     Data.add(object); 
    } 
} 
+0

我們不需要將這些循環合併爲一個正確的....我的意思是我仍然可以將它分開並在它們的每個循環中創建新的實例... – Kevin

+0

我假定數據是相關的,但是如果列表用於創建單獨的對象,只是在循環的一側創建對象,並將它們存儲在'Data'中。 – MByD

+0

最後一個問題,我不理解你以前的評論....它是一個List對象,我將傳遞給功能。 – Kevin