Java 如何添加数据加载项列表<;对象>;android中的项目

Java 如何添加数据加载项列表<;对象>;android中的项目,java,android,Java,Android,我是一名新的android开发者。我正在开发一个示例应用程序。我想在对象列表中添加一些数据 My MainActivity.java类代码: public class MainActivity extends Activity { private PersonalInfo item; private List<PersonalInfo> itemList = new ArrayList<PersonalInfo>(); @Override protected void

我是一名新的android开发者。我正在开发一个示例应用程序。我想在对象列表中添加一些数据

My MainActivity.java类代码:

public class MainActivity extends Activity {
private PersonalInfo item;
private List<PersonalInfo> itemList = new ArrayList<PersonalInfo>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    for (int i = 0; i < 5; i++) {
        item.setFirstName("AA::" + i);
        item.setLastName("BB::" + i);
        item.setAddress("New City " + i);
        item.setSex("Male");
        itemList.add(item);
        item = new PersonalInfo();
    }
    for(PersonalInfo p:itemList){
        System.out.println("First Name::"+p.getFirstName());
        System.out.println("Last Name::"+p.getLastName());
    }

}

}
public class PersonalInfo {

 private String firstName;
 private String lastName;
 private String address;
 private String sex;

 public String getFirstName() {
  return firstName;
 }
 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }
 public String getLastName() {
   return lastName;
 }
 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
   this.address = address;
 }
 public String getSex() {
   return sex;
 }
 public void setSex(String sex) {
   this.sex = sex;
 }  

}
当我运行它时,则显示流动错误


谢谢您的帮助。

也请更改此循环

    for (int i = 0; i < 5; i++) {
        item = new PersonalInfo();  // line1
        item.setFirstName("AA::" + i);
        item.setLastName("BB::" + i);
        item.setAddress("New City " + i);
        item.setSex("Male");
        itemList.add(item);

    }
    for (PersonalInfo p : itemList) {
        System.out.println("First Name::" + p.getFirstName());
        System.out.println("Last Name::" + p.getLastName());
    }
for(int i=0;i<5;i++){
item=new PersonalInfo();//第1行
项目.setFirstName(“AA::”+i);
item.setLastName(“BB::”+i);
项目.设置地址(“新城”+i);
项目.固定汇率(“公”);
项目列表。添加(项目);
}
用于(个人信息p:itemList){
System.out.println(“名字::”+p.getFirstName());
System.out.println(“姓氏::”+p.getLastName());
}
问题出在
Line1
:不创建对象就无法将值插入到对象中。因此,必须首先创建对象,然后初始化其属性

问题在于:

for (int i = 0; i < 5; i++) {
        item.setFirstName("AA::" + i);  <-- error happened here because item is null
        item.setLastName("BB::" + i);
        item.setAddress("New City " + i);
        item.setSex("Male");
        itemList.add(item); 
        item = new PersonalInfo();
    }

你只需要新建一个PersonalInfo实例
像这样:

for (int i = 0; i < 5; i++) {
    item = new PersonalInfo();  <-- I've moved this line
    item.setFirstName("AA::" + i);
    item.setLastName("BB::" + i);
    item.setAddress("New City " + i);
    item.setSex("Male");
    itemList.add(item);
}
for(int i=0;i<5;i++){

item=新的PersonalInfo();创建item变量的新实例,然后将另一项设置为它,您必须在for语句中创建新实例,然后再设置任何内容。您确定列表的大小始终为5吗?可能OP将其设置为5只是为了测试,所以使用数组不合适,正如我在回答中所说,初始化行是个问题,所以不需要将列表更改为array@sHayan Pourvatan此更改可接受吗?我们可以使用count变量更改大小。为什么不使用List?此解决方案仅适用于固定大小。@Shayan Pourvatan我明白你的意思,此编辑可接受吗?提前谢谢。这真的很有帮助。但请你解释一下为什么我们每次在循环中都需要重新初始化它。@gaurav4sarma按引用调用问题,如果您不在循环中初始化,则每次更改一个实例,因为您的列表项指向对象的引用,所有项都更改为最后一项。如果还不清楚,请告诉我解释更多。我明白了,很抱歉错过了@shayan的一个主要小细节
for (int i = 0; i < 5; i++) {
    item = new PersonalInfo();  <-- I've moved this line
    item.setFirstName("AA::" + i);
    item.setLastName("BB::" + i);
    item.setAddress("New City " + i);
    item.setSex("Male");
    itemList.add(item);
}