-1

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"}
4

3 に答える 3

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); 
}
于 2012-06-04T07:04:05.323 に答える
2

問題は、変更してリストに読み込む CalenderQueryOutput を 1 つだけ作成することです。新しいオブジェクトを作成する必要があります。

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); 
}
于 2012-06-04T07:04:16.583 に答える
1

これをforループに入れて....

CalanderQueryOutput caldavOutput = new CalanderQueryOutput();
于 2012-06-04T07:16:54.027 に答える