2012-06-04 60 views
-1

的ArrayList <>複製的最後一個值,,,ArrayList中只顯示最後一個元素

ArrayList<CalanderQueryOutput> results = new ArrayList<CalanderQueryOutput>(); 

List<?> eventsToday = (List<?>) filter.filter(calendar.getComponents(Component.VEVENT)); 
CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); 

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) { 
Component component = (Component) i.next(); 
{ 
    String Created=component.getProperty(Property.CREATED).toString().trim(); 
    String Summary = component.getProperty(Property.SUMMARY).toString().trim(); 

    caldavOutput.CREATED_DATE = Created; 
    caldavOutput.Summary = Summary; 

} 
results.add(caldavOutput); 
} 

個輸出只顯示最後一個值

{"CREATED_DATE":"01-Jun-2012","Summary":"Today Swimming"},{"CREATED_DATE":"01-Jun-2012","Summary":"Today Swimming"},{"CREATED_DATE":"01-Jun-2012","Summary":"Today Swimming"} 
+0

我已經測試,它並沒有改變 –

+0

我已經測試,它並沒有改變,請大家幫忙 –

回答

1

把這個裏面的for循環....

CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); 
2

你應該把循環內:

CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); 

否則,您總是修改相同的caldavOutput對象。

你是總是放置相同的元素,並修改它和元素留下你最後的值,你給它。這就是爲什麼你認爲只輸出最後一個元素。

所以,你應該做的:

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) { 
    Component component = (Component) i.next();{ 
    String Created=component.getProperty(Property.CREATED).toString().trim(); 
    String Summary = component.getProperty(Property.SUMMARY).toString().trim(); 


    CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); // Here 
    caldavOutput.CREATED_DATE = Created; 
    caldavOutput.Summary = Summary; 

    } 
    results.add(caldavOutput); 
} 
2

的問題是,你只能創建你修改和讀取到列表中的一個CalenderQueryOutput。你需要創建一個新的對象。

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) { 
    Component component = (Component) i.next(); 
    String Created=component.getProperty(Property.CREATED).toString().trim(); 
    String Summary = component.getProperty(Property.SUMMARY).toString().trim(); 

    CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); 

    caldavOutput.CREATED_DATE = Created; 
    caldavOutput.Summary = Summary; 
    results.add(caldavOutput); 
} 
+0

我不是僅修改上市我CalenderQueryOutput –

+0

是的,謝謝你,它正在工作。非常感謝你roger –

+0

caldavOutput.CREATED_DATE =創建;正在修改對象。你最初做的是創建一個對象並將其添加到列表中,然後修改該對象(從而修改列表中的對象),然後再將ti添加到列表中。現在列表有兩個引用,都指向同一個對象。最後你有一個n引用列表,全部指向同一個對象,當然這個對象具有最後修改的值。 –

相關問題