Foros del Web » Programación para mayores de 30 ;) » Java »

Array de objetos en Java nullPointer

Estas en el tema de Array de objetos en Java nullPointer en el foro de Java en Foros del Web. Hola estimados colegas :). Escribo porque se me presentó un error en mi código y no he podido resolverlo. Soy lector del foro desde hace ...
  #1 (permalink)  
Antiguo 04/03/2015, 10:04
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Pregunta Array de objetos en Java nullPointer

Hola estimados colegas :).

Escribo porque se me presentó un error en mi código y no he podido resolverlo. Soy lector del foro desde hace tiempo pero nunca me animé a escribir hasta ahora.

Tengo una clase Picto, que contiene una imagen, un texto y un array de clases (serían sus hijos, son del mismo tipo) de esta forma se forma un árbol de relaciones.

public class Picto {
protected Drawable Icono;
protected String Oracion;
protected Picto[] Hijos;

public Picto(Drawable icono, String oracion, Picto[] hijos) {
super();
this.Icono = icono;
this.Oracion = oracion;
this.Hijos = hijos;
}

public Drawable getIcono() {return Icono;}

public String getOracion() {return Oracion;}

public Picto[] getHijos() {return Hijos;}

public Picto getQueHijo(int i) {return Hijos[i];}
}

Todo funciona perfecto hasta que quiero acceder a los hijos de mi Picto, de esta forma


Opcion1.setImageDrawable(pictograma.getQueHijo(1). getIcono());

Ahi me arroja un nullPointerException y la verdad no se que estoy haciendo mal.

Estoy a su disposición cualquier duda que haya dejado mi comentario.

Muchas gracias
  #2 (permalink)  
Antiguo 04/03/2015, 10:25
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Array de objetos en Java nullPointer

Cita:
Opcion1.setImageDrawable(pictograma.getQueHijo(1). getIcono());
Imposible de saber con lo que has puesto. Habria que ver el codigo cuando llamas al constructor y que es lo que le pasas como parametro. Quizas no inicializas el array de hijos? No basta con declararlo.


P.D: Por favor, intenta formatear el codigo en proximos posts utilizando la etiqueta hightlight.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 04/03/2015, 10:40
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Mensaje Respuesta: Array de objetos en Java nullPointer

Gracias por la respuesta, genial, empezare a utilizar la etiqueta.

Código Java:
Ver original
  1. public class Picto {
  2.     protected Drawable Icono;
  3.     protected String Oracion;
  4.     protected Picto[] Hijos;
  5.  
  6.     public Picto(Drawable icono, String oracion, Picto[] hijos) {
  7.         super();
  8.         this.Icono = icono;
  9.         this.Oracion = oracion;
  10.         this.Hijos = hijos;
  11.         Log.e("TAG","Se creo un Picto "+oracion);
  12.     }
  13.  
  14.     public Drawable getIcono() {Log.e("TAG","Devuelvo un drawable");return Icono;}
  15.  
  16.     public String getOracion() {Log.e("TAG","Devuelvo una oracion");return Oracion;}
  17.  
  18.     public Picto[] getHijos() {return Hijos;}
  19.  
  20.     public Picto getQueHijo(int i) {Log.e("TAG","Devuelvo un hijo");return Hijos[i];}

Código Java:
Ver original
  1. //Declaro mis pictos
  2.  
  3.     Picto Hola;
  4.     Picto Chau;
  5.     Picto Bien;
  6.     Picto Comoestas;
  7.     Picto Jabon;
  8.     Picto Dos;
  9.     Picto Tres;
  10.     Picto Cuatro;
  11.  
  12.     protected void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.  
  15.         //Aquí implemento los picto, les asigno un icono, un texto y sus hijos. Es la forma correcta?
  16.         Hola=new Picto(getResources().getDrawable(R.drawable.ic_hola),"Hola", new Picto[]{Jabon, Aspirina, Digestivo, Descongestivo});
  17.         Comoestas=new Picto(getResources().getDrawable(R.drawable.ic_comoestas),"Como estas?", new Picto[]{Jabon, Aspirina, Digestivo, Descongestivo});
  18.         Bien=new Picto(getResources().getDrawable(R.drawable.ic_bien),"Bien", new Picto[]{Jabon, Aspirina, Digestivo, Descongestivo});
  19.         Chau=new Picto(getResources().getDrawable(R.drawable.ic_adios),"Chau", new Picto[]{Jabon, Aspirina, Digestivo, Descongestivo});
  20.         Jabon = new Picto(getResources().getDrawable(R.drawable.ic_jabon),"Jabon",new Picto[]{Hola, Comoestas, Bien, Chau});
  21.         Aspirina = new Picto(getResources().getDrawable(R.drawable.ic_aspirina),"Aspirina",new Picto[]{Hola, Comoestas, Bien, Chau});
  22.         Digestivo = new Picto(getResources().getDrawable(R.drawable.ic_digestivo),"Digestivo",new Picto[]{Hola, Comoestas, Bien, Chau});
  23.         Descongestivo = new Picto(getResources().getDrawable(R.drawable.ic_descongestivo),"Descongestivo",new Picto[]{Hola, Comoestas, Bien, Chau});
  24.  
  25. }
  26.         //Luego tengo esta función que me pone un imagen correspondiente al primer hijo, de fondo de mi boton.
  27.  
  28.         void CargarHijos(Picto pictograma){
  29.         Opcion1.setImageDrawable(pictograma.getQueHijo(1).getIcono());
  30.         Opcion1.startAnimation(AnimationUtils.loadAnimation(this, R.anim.overshoot_abajo));
  31.         Opcion2.setImageDrawable(pictograma.getQueHijo(2).getIcono());
  32.         Opcion2.startAnimation(AnimationUtils.loadAnimation(this, R.anim.overshoot_abajo));
  33.  
  34. }
  35.      @Override
  36.         public void onClick(View v) {
  37.         String Saludo = " ";
  38.         String SaludoChau = " ";
  39.         switch (v.getId()) {
  40.             case R.id.Opcion1:
  41.                 CargarSeleccion(PictoOpcion2);
  42.                 CargarHijos(PictoOpcion2);
  43.                 CantClicks++;
  44.                 break;
  45.             case R.id.Opcion2:
  46.                 CargarOracion(PictoOpcion2);
  47.                 CargarSeleccion(PictoOpcion2);
  48.                 CargarHijos(PictoOpcion2);
  49.                 CantClicks++;
  50.                 break;

Además puse unas entradas en el LOG para ver que está ocurriendo.

y el Log>
03-04 13:57:01.147 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Hola
03-04 13:57:01.177 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Como estas?
03-04 13:57:01.207 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Bien
03-04 13:57:01.227 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Chau
03-04 13:57:01.247 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Jabon
03-04 13:57:01.307 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Aspirina
03-04 13:57:01.377 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Digestivo
03-04 13:57:01.427 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Se creo un Picto Descongestivo
03-04 13:57:27.485 30164-30164/com.stonefacesoft.ottaa E/TAG﹕ Devuelvo un hijo


Ese es el error
java.lang.NullPointerException
at com.stonefacesoft.ottaa.Principal.CargarHijos(Prin cipal.java:272)
at com.stonefacesoft.ottaa.Principal.onClick(Principa l.java:301)

Última edición por hectoritr; 04/03/2015 a las 10:56 Razón: Faltaban datos del problema
  #4 (permalink)  
Antiguo 04/03/2015, 14:18
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Array de objetos en Java nullPointer

Buenas,

Ok. Para comenzar comentarte que en java los arrays comienzan en 0 y no en 1. Por lo que si quieres acceder al primer hijo tienes que hacer un getQueHijo(0). Sin embargo esto no debería ser la causa del nullpointer.

Sería interesante que sepas cual es el elemento que está fallando. Te propongo que lo escribas en el log (aunque lo perfecto seria que depurases el código).

Código Java:
Ver original
  1. TULOG("Voy a obtener el hijo de " +  pictograma.getOracion());
  2. Opcion1.setImageDrawable(pictograma.getQueHijo(1).getIcono());

Una cosa que me extraña es que creas los pictogramas que se llaman:
Hola
Comoestas
Bien
Chau
Jabon
Aspirina
Digestivo
Descongestivo


Sin embargo, intentas cargar los hijos de un pictograma llamado ¿PictoOpcion2?? De donde sale?

Código Java:
Ver original
  1. CargarHijos(PictoOpcion2);

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: android, null
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:23.