Java 构造函数和方法中数组的内容不同

Java 构造函数和方法中数组的内容不同,java,list,constructor,arraylist,Java,List,Constructor,Arraylist,我有自己的类事件,它几乎没有变量,比如主题和开始和结束时间。然后我有一个Day类,它有这些事件。然而,当我初始化Day时,它在构造函数中得到正确的Event列表,然后我将该列表存储在本地列表中,然后尝试用其他方法返回它,但它为同一列表提供了不同的内容 以下是澄清问题的代码: import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; public class Day {

我有自己的类
事件
,它几乎没有变量,比如主题开始结束时间。然后我有一个
Day
类,它有这些
事件。然而,当我初始化
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();
    }
}
这是我的电话号码:

 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());
            }
        }
        }
private void getObjects(字符串url)抛出JSONException,异常{
JSONObject JSONObject=newjsonobject(newnettask().execute(url.get());
JSONArray job1=jsonObject.getJSONArray(“事件”);
ArrayList事件=新建ArrayList();
Calendar calPrev=Calendar.getInstance();
int prevDate=0;
布尔值优先=真;
对于(int i=0;i

知道我做错了什么吗?

您好,没有问题,我用string arraylist测试了它,它工作正常

但是我们不知道如何填充arraylist并将其传递给类,如果它如下所示,它应该正常工作

创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main)

ArrayList arr=new ArrayList();
协议增补(“1”);
协议增补(“2”);
协议增补(“3”);
协议增补(“4”);
协议增补(“5”);
协议增补(“6”);
d天=新的一天(1,arr);
d、 getStrings();
}
包com.talha.examples;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
公课日{
私有字符串日期;
私有ArrayList字符串=新ArrayList();
私有SimpleDataFormat dayDotMonth=新SimpleDataFormat(“dd.MM EEEE”);
公共日(int日期,ArrayList新闻字符串){
this.Strings=newStrings;
System.out.println(“来自构造函数:”);
for(字符串s:this.Strings){
System.out.println(s);//正确的列表
}
Calendar cal=Calendar.getInstance();
校准设置时间单位为毫秒(日期*1000L);
this.date=dayDotMonth.format(cal.getTime());
}
公共字符串getDate(){
返回此日期;
}
公共ArrayList getStrings(){
System.out.println(“来自getStrings():”;
for(字符串s:this.Strings){
System.out.println(s);//列表不正确
}
返回这个.Strings;
}
public int getAmountOfStrings(){
返回此.Strings.size();
}
}

您没有显示调用构造函数的内容,但您只是将引用复制到集合这一事实意味着,如果以后更改了集合,您将看到这些更改。例如:

ArrayList<Event> events = new ArrayList<Event>();
events.add(new Event(0, 1, "id", "subject", "description"));
Day day = new Day(0, events);
events.clear();
System.out.println(day.getEvents().size()); // 0
为此:

this.events = new ArrayList<Event>(newEvents);
this.events=newarraylist(newEvents);

此外,我建议您将
ArrayList
变量和参数更改为
List
类型-通常,您更喜欢编程到接口。事件中的
开始
结束
是什么意思也不清楚,您的代码当前使用的是系统的默认时区-是吗?

更改此选项。events=newEvents;到this.events=newarraylist(newEvents);工作!谢谢
ArrayList<Event> events = new ArrayList<Event>();
events.add(new Event(0, 1, "id", "subject", "description"));
Day day = new Day(0, events);
events.clear();
System.out.println(day.getEvents().size()); // 0
this.events = newEvents;
this.events = new ArrayList<Event>(newEvents);