La aplicación de Android falló cuando se agregó un objeto a ArrayList
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código ni la salida en markdown.
Soy nuevo en esto, así que disculpe cualquier error.
Contexto: como parte del objeto “Training”, estoy tratando de agregar un “ArrayList” de objetos “Exercises”. Sin embargo, cada vez que intento agregar un objeto “Exercise” al “ArrayList” de “Training”, la aplicación se bloquea. Cualquier ayuda es bienvenida.
Los objetos “Training” y “Exercise” se ven así:
public class Training {
public Integer trainingNumber;
public Date datum;
public Integer nrOfExercises;
public ArrayList<Exercise> exercises;
}
public class Training {
public Integer trainingNumber;
public Date datum;
public Integer nrOfExercises;
public ArrayList<Exercise> exercises;
}
El código que intenta generar todo esto es el siguiente:
private Training createRandomTraining(int i){
Training randomTraining = new Training();
Random random = new Random();
int d = random.nextInt(30)+1;
int m = random.nextInt(12)+1;
//int y = random.nextInt(21)+2000;
int amountOfExercises = random.nextInt(9-6)+6;
randomTraining.trainingNumber = i;
randomTraining.datum = new Date(2021,m,d);
for (int j = 0; j < amountOfExercises ; j ++){
Exercise exercise = new Exercise();
Random r = new Random();
int set = r.nextInt(5)+1;
int nameInt = r.nextInt(3);
int rep = r.nextInt(12)+1;
//int y = random.nextInt(21)+2000;
exercise.trainingNumber = i;
exercise.exerciseNumber = j+1;
exercise.exerciseName = getExerciseName(nameInt);
exercise.sets = set;
exercise.reps = rep;
exercise.weight = random.nextInt(200-50)+50;
randomTraining.exercises.add(exercise); //la aplicación se bloquea aquí.
}
randomTraining.nrOfExercises = amountOfExercises;
return randomTraining;
}
davy.ai
El problema con el código es que el ArrayList exercises en la clase Training no ha sido inicializado antes de agregar objetos Exercise a él. En Java, cuando un ArrayList no es inicializado y se agrega un elemento a él, se lanza una NullPointerException, lo que causa que la aplicación se bloquee.
Para solucionar el problema, inicialice el ArrayList exercises antes de agregar objetos Exercise a él. Una forma de hacerlo es agregar un constructor a la clase Training que inicialice el ArrayList exercises, como se muestra a continuación:
Con este constructor, cada vez que se crea un nuevo objeto Training, su ArrayList exercises se inicializará.
Alternativamente, puede inicializar el ArrayList exercises en el método createRandomTraining, agregando la siguiente línea de código antes del bucle for donde se agregan objetos Exercise:
Esto inicializará el ArrayList exercises antes de agregar objetos Exercise a él en el bucle.