Как добавить данные в элементы списка в Android

#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);
}