Error al implementar un Adapter en mi Lista de NavigationDrawer

31 views
Skip to first unread message

Josue C.P.

unread,
Feb 3, 2015, 8:30:42 PM2/3/15
to desarrollad...@googlegroups.com
Hola a tod@s!!

Estoy practicando un poco con el menu NavigationDrawer y he conseguido crear una aplicación sencilla implementandolo. Y hasta ahí todo bien, me ha salido sin ningun problema. 
El problema ahora es que quiero crear un adaptador para la lista de menus que contiene el NavigationDrawer. Practicamente ya he hecho todo, pero parece ser segun lo que veo en el LogCat, que al intentar añadir las lineas a mi Arraylist, me da el error.

Copio a continuacion el error que me lanza:

02-04 01:06:28.541    3013-3013/navigationdw.josuecamara.es.practicanavigationdrawer D/AndroidRuntime﹕ Shutting down VM
02-04 01:06:28.541    3013-3013/navigationdw.josuecamara.es.practicanavigationdrawer E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: navigationdw.josuecamara.es.practicanavigationdrawer, PID: 3013
    java.lang.RuntimeException: Unable to start activity ComponentInfo{navigationdw.josuecamara.es.practicanavigationdrawer/navigationdw.josuecamara.es.practicanavigationdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
            at navigationdw.josuecamara.es.practicanavigationdrawer.MainActivity.onCreate(MainActivity.java:51)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Ahora voy a copiar la parte del codigo de mi actividad principal donde yo creo que se produce el error, al llamar al metodo add.

public class MainActivity extends ActionBarActivity {

    private ArrayList<Item> opcionesMenu;
    private DrawerLayout drawerLayout;
    private ListView drawerList;
    private CharSequence tituloSeccion ="Hola";
    private ActionBarDrawerToggle drawerToggle;
    private AdapterItem adapterItem;

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

        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        drawerList = (ListView)findViewById(R.id.left_drawer);

        opcionesMenu.add(new Item(getResources().getDrawable(R.drawable.list_icon_a),"Menu A"));
        opcionesMenu.add(new Item(getResources().getDrawable(R.drawable.list_icon_b),"Menu B"));
        opcionesMenu.add(new Item(getResources().getDrawable(R.drawable.list_icon_c),"Menu C"));


        adapterItem = new AdapterItem(this,opcionesMenu);
        drawerList.setAdapter(adapterItem);


Entiendo que el LogCat me esta queriendo decir que al llamar al metodo add, el segundo parametro hace referencia a un objeto que no encuentra. Pero no entiendo porque, si en mi clase Item como segundo parametro pido un String.
Para mas detalles les adjunto uno de los metodos constructor de mi clase Item.

    public Item(Drawable imagen, String texto) {
        this.imagen = imagen;
        this.texto = texto;
    }


Bueno, seguiré investigando pero si alguien ve algo me ayudaría muchisimo.

Gracias.


 

Yanet Hevia Quintana

unread,
Feb 4, 2015, 6:25:02 AM2/4/15
to desarrollad...@googlegroups.com
hola le estas pasando un null al método add y ya que no puede ser el string debe ser el resource mira bien que este cogiendo el valor correctamente y que realmente pasa un int y no un null
un saludo

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/a0afe9b1-b559-40d6-94b9-5762fce70e10%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Josue C.P.

unread,
Feb 4, 2015, 2:17:03 PM2/4/15
to desarrollad...@googlegroups.com
Gracias pelirroja, he intentado a hacerlo paso a paso y no en una sola linea...

        Item item = new Item(getResources().getDrawable(R.drawable.list_icon_a),"Hola");
        Item item1 = new Item(getResources().getDrawable(R.drawable.list_icon_b),"hola2");
        Item item2 = new Item(getResources().getDrawable(R.drawable.list_icon_c),"Hola3");

        opcionesMenu.add(item);
        opcionesMenu.add(item1);
        opcionesMenu.add(item2);

Puede que no sea la forma mas directa pero de momento es como lo entiendo mejor. Aún así, de esa manera el logCat me lanza otro error...

02-04 18:53:42.618    1918-1918/navigationdw.josuecamara.es.practicanavigationdrawer E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: navigationdw.josuecamara.es.practicanavigationdrawer, PID: 1918
    java.lang.RuntimeException: Unable to start activity ComponentInfo{navigationdw.josuecamara.es.practicanavigationdrawer/navigationdw.josuecamara.es.practicanavigationdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
            at navigationdw.josuecamara.es.practicanavigationdrawer.AdapterItem.getCount(AdapterItem.java:28)
            at android.widget.ListView.setAdapter(ListView.java:487)
            at navigationdw.josuecamara.es.practicanavigationdrawer.MainActivity.onCreate(MainActivity.java:53)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-04 18:53:45.445    1918-1918/navigationdw.josuecamara.es.practicanavigationdrawer I/Process﹕ Sending signal. PID: 1918 SIG: 9

Esta vez hace referencia al metodo size. Tendré que seguir mirando ejemplos y apuntes porque la verdad que se me escapa un poco.

Gracias

Yanet Hevia Quintana

unread,
Feb 5, 2015, 4:14:04 PM2/5/15
to desarrollad...@googlegroups.com
Hola siento la demora en responder pero no he tenido mucho tiempo ahora mismo no puedo ponerme a mirar el código pero más menos te pongo la forma en que lo hago

 //Creo los elementos del menu que ya los tengo en el r
        String[] listaElementos= getResources().getStringArray(R.array.menuprincipalelementos);  

//creo el adapter y le paso la lista de elementos
 AdapterPrincipal adapterP = new AdapterPrincipal(ActivityMain.this,  R.layout.lista, listaElementos);
           
//se lo asigno al drawer
 DrawerLayout drawer;
 drawer.setAdapter(adapterP );

Ya está con esto te debería salir, de todas formas android trae un ejemplo que te ayudara muchísimo


 un saludo


--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Roger Isaac Navarro Perez

unread,
Feb 6, 2015, 5:28:20 AM2/6/15
to desarrollad...@googlegroups.com

Me parece que el objeto arraylist no tiene un constructor por lo tanto no tienes una instancia del mismo la forma como esta declarado por defecto inicializa con nulo.

Saludos

Josue C.P.

unread,
Feb 14, 2015, 10:27:23 AM2/14/15
to desarrollad...@googlegroups.com
Gracias a los dos! y disculmenme por la demora. Pues el problema era el que había comentado rogernavarroitmerida, no había instanciado el ArrayList. Es lo que tiene estar un poco verde en Java aún XD

Nuevamente dar la gracias a los dos, me habéis sido de gran ayuda.
Reply all
Reply to author
Forward
0 new messages