2011-08-21 9 views
8

Hola, estoy escribiendo una pequeña aplicación de Android (Versión 2.3.3). Ahora me sale este Excepción NullPointer extraña en este código muy básico:NullPointerException en onCreate() cuando se usa findViewById - setContentView se usa antes?

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.mainmenu); 

newDeck = (Button) findViewById(R.id.newDeckB); 
loadDeck = (Button) findViewById(R.id.loadDeckB); 
viewEdition = (Button) findViewById(R.id.viewEditionB); 

newDeck.setOnClickListener(this); 
loadDeck.setOnClickListener(this); 
viewEdition.setOnClickListener(this); 
} 

Im usando este diseño simple en el momento en menu.xml principal:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<Button android:id="@+id/newDeckB" 
     android:text="New Deck" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
<Button android:id="@+id/loadDeckB" 
     android:text="Load Deck" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
<Button android:id="@+id/viewEditionB" 
     android:text="View Edition" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
<TextView android:id="@+id/currentDeckTextView" 
     android:text="Default Deck" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

Ahora mi problema es una nullpointexception en la línea 25 , que es la línea donde i establecer el primer clickListener

newDeck.setOnClickListener(this); 

Usando el depurador i cuenta de que el botón newDeck es nulo. Busqué mucho en la web, pero la única respuesta a ese tipo de problema fue verificar que setContentView esté configurado antes de findViewById. Este es obviamente el caso aquí.

Estaría muy contento de cualquier tipo de consejo.

Thx in Before!

+0

¿Tiene 'R.id.newDeckB' realidad existen en' R.layout.mainmenu'? –

+0

Estaba teniendo exactamente el mismo problema (¡frustrante!), Y fue el comentario a continuación (@manelizzard) lo que me solucionó: 'A veces es necesario "limpiar" y reconstruir el proyecto para obtener los resúmenes correctos compilados, es algo de Eclipse '. (es decir, no es necesario que use 'onPostCreate()'!) – coco

+0

Limpiar y reconstruir obras ... qué extraño. –

Respuesta

10

Obtenga sus puntos de vista y configure los oyentes en el método onPostCreate().

+0

Muchas gracias por tus publicaciones. Realmente no entiendo por qué pero ahora funciona. Acabo de cambiar los id-Names tanto en el código java como en el xml (de newDeckB a newDeckButton) y ahora funciona. Realmente no lo entiendo porque ya lo intenté ayer y no resolvió el problema. – Neuhier

+1

A veces es necesario "limpiar" y reconstruir el proyecto para obtener los resúmenes correctos compilados, es algo de Eclipse. El método onPostCreate() se ejecuta cuando el contenido está completamente cargado. Acepte la respuesta, plz =) – manelizzard

+0

Gracias por su explicación. – Neuhier

-2

Hay dos acontecimientos que la App espera, onCreate(), y onStart()

cuál se pone esta función en, materia.

tuve que mover "findViewById" de onCreate() para onStart()

@Override 
protected void onStart() { 
     // use findViewById() here instead of in onCreate() 
    } 
+1

Incluye más información por favor. –

+0

Necesita explicar su respuesta más claramente. De lo contrario, no es demasiado útil, incluso si es correcto. – JakeGould

+0

Hay dos eventos que la aplicación espera, onCreate(), y onStart() En cuál pone esta función, importa. –

Cuestiones relacionadas