#java #android
#java #Android
Вопрос:
Я новый разработчик Android.Я разрабатываю образец приложения.Я хочу добавить некоторые данные в список объектов.
Мой 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());
}
}
}
Мой PersonalInfo.java код класса:
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;
}
}
Когда я его запускаю, тогда отображается текущая ошибка
Спасибо за вашу помощь.
Комментарии:
1. создайте новый экземпляр переменной item, затем задайте для нее другую вещь, вы должны создать новый экземпляр в своем операторе for и, прежде чем устанавливать что-либо в нем
Ответ №1:
проблема здесь:
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();
}
вам нужно сначала инициализировать item
, затем установить для этого данные, поэтому ваш код должен быть:
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);
}
Комментарии:
1. Спасибо, это действительно полезно. Но не могли бы вы, пожалуйста, объяснить, почему нам нужно повторно инициализировать его каждый раз в цикле.
2. @gaurav4sarma проблема с вызовом по ссылке, если вы не инициализируете в цикле, вы каждый раз меняете один экземпляр, поскольку элементы вашего списка указывают на ссылку на объект, все элементы меняются на последний элемент. если это еще не ясно, скажите, чтобы я объяснил подробнее
3. Прошу прощения, что упустил такую важную деталь @shayan
Ответ №2:
измените свой цикл for также следующим образом
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());
}
Ваша проблема в Line1
: вы не можете вставить значения в объект, не создавая его. Итак, вы должны сначала создать объект, а затем инициализировать его атрибуты.
Комментарии:
1. Вы уверены, что размер списка всегда равен 5? возможно, OP установил это значение равным 5 только для теста, поэтому использование массива не подходит, и, как я сказал в своем ответе, инициализирующая строка является проблемой, поэтому не нужно менять список на массив
2. @shayanpourvatan Приемлемо ли это изменение? мы можем изменить размер, используя переменную count.
3. почему вы не используете List? это решение работает только для фиксированного размера.
4. @shayanpourvatan Я понял вашу точку зрения, приемлемо ли это редактирование? заранее спасибо
Ответ №3:
Вам просто нужно создать новый экземпляр 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);
}