件名、開始時間、終了Event
時間などの変数がほとんどない独自のクラスがあります。それから私はこれらを持っているクラスを持っています。ただし、初期化すると、コンストラクターで正しいリストを取得し、そのリストをローカルリストに格納してから、他のメソッドで返そうとしますが、同じリストに対して異なるコンテンツが表示されます。Day
Events
Day
Event
これが物事を明確にするためのコードです:
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
public class Day {
private String date;
private ArrayList<Event> events = new ArrayList<Event>();
private SimpleDateFormat dayDotMonth = new SimpleDateFormat("dd.MM EEEE");
public Day(int date, ArrayList<Event> newEvents){
this.events = newEvents;
System.out.println("FROM Constructor:");
for (Event event : this.events) {
System.out.println(event.getSubject()); // CORRECT LIST
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date*1000L);
this.date = dayDotMonth.format(cal.getTime());
}
public String getDate(){
return this.date;
}
public ArrayList<Event> getEvents(){
System.out.println("FROM getEvents():");
for (Event event : this.events) {
System.out.println(event.getSubject()); // INCORRECT LIST
}
return this.events;
}
public int getAmountOfEvents(){
return this.events.size();
}
}
コンストラクターでリストを出力すると、正しいリストが得られます。しかし、getEvents()
メソッドでリストを印刷すると、その中にある場合とない場合があるイベントが1つだけ表示されDay
ます。
これが私のイベントクラスです:
public class Event {
private int start, end;
private String subject, eventId, description;
public Event(int start, int end, String subject, String eventId, String description) {
this.start = start;
this.end = end;
this.subject = subject;
this.description = description;
this.eventId = eventId;
}
public int getStart() {
return this.start;
}
public int getEnd() {
return this.end;
}
public String getSubject() {
return this.subject;
}
public String getEventId() {
return this.eventId;
}
public String getDescription() {
return this.description;
}
}
これが私の呼び出しコードです:
private void getObjects(String url) throws JSONException, Exception {
JSONObject jsonObject = new JSONObject(new NetTask().execute(url).get());
JSONArray job1 = jsonObject.getJSONArray("events");
ArrayList<Event> events = new ArrayList<Event>();
Calendar calPrev = Calendar.getInstance();
int prevDate = 0;
boolean first = true;
for (int i = 0; i < job1.length(); i++) {
JSONObject myJsonObject = job1.getJSONObject(i);
int start = myJsonObject.getInt("start");
int end = myJsonObject.getInt("end");
String subject = myJsonObject.getString("subject");
String eventId = myJsonObject.getString("eventid");
String description = myJsonObject.getString("description");
if(first){
prevDate = start;
calPrev.setTimeInMillis(start*1000L);
events.add(new Event(start,end,subject,eventId,description));
first = false;
}else{
Calendar calCur = Calendar.getInstance();
calCur.setTimeInMillis(start*1000L);
if(calPrev.get(Calendar.YEAR) == calCur.get(Calendar.YEAR) && calPrev.get(Calendar.DAY_OF_YEAR) == calCur.get(Calendar.DAY_OF_YEAR)){
events.add(new Event(start,end,subject,eventId,description));
calPrev.setTimeInMillis(start*1000L);
}else{
calPrev.setTimeInMillis(start*1000L);
this.days.add(new Day(prevDate,events));
prevDate = start;
events.clear();
events.add(new Event(start,end,subject,eventId,description));
}
}
}
this.days.add(new Day(prevDate,events));
System.out.println("Last day added to list\nPrinting events from days:");
for (Day day : this.days){
ArrayList<Event> events = day.getEvents();
for(Event event : events){
System.out.println(event.getSubject());
}
}
}
私が間違っていることは何ですか?