2012-07-01 16 views
6

Aparece el siguiente mensaje de error cuando ejecuto mi aplicación básica. La aplicación consiste en un botón llamado button1 y un textView llamado topLeft.Principiante Android Development: findViewById número

07-01 15:33:02.754: D/AndroidRuntime(2334): Shutting down VM 07-01 15:33:02.754: W/dalvikvm(2334): threadid=1: thread exiting with 
uncaught exception (group=0x40a13300) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): FATAL EXCEPTION: main 07-01 15:33:02.984: 
E/AndroidRuntime(2334): java.lang.RuntimeException: Unable to instantiate activity 
ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}: 
java.lang.NullPointerException 07-01 15:33:02.984: 
E/AndroidRuntime(2334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983) 
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.access$600(ActivityThread.java:130) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.os.Handler.dispatchMessage(Handler.java:99) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at android.os.Looper.loop(Looper.java:137) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): at android.app.ActivityThread.main(ActivityThread.java:4745) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invokeNative(Native Method) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invoke(Method.java:511) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-01 15:33:02.984: E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at dalvik.system.NativeStart.main(Native Method) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): Caused by: java.lang.NullPointerException 
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.Activity.findViewById(Activity.java:1825) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at com.example.myfirstapp.MainActivity.<init>(MainActivity.java:28) 07-01 
15:33:02.984: E/AndroidRuntime(2334): at java.lang.Class.newInstanceImpl(Native Method) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): at java.lang.Class.newInstance(Class.java:1319) 07-01 15:33:02.984: 
E/AndroidRuntime(2334): at android.app.Instrumentation.newActivity(Instrumentation.java:1053) 
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) 
07-01 15:33:02.984: E/AndroidRuntime(2334):  ... 11 more 

Al intentar utilizar la findViewById, este error aparece en referencia a la línea 28.

El programa tiene el siguiente aspecto:

package com.example.myfirstapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnClickListener{ 

    int a = 0; 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


    Button button1 = (Button) findViewById(R.id.button1); 
    TextView topLeft = (TextView) findViewById(R.id.textView2); 
// button1.setOnClickListener(this); 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    }  

} 

¿Qué significa esto? ¿Por qué mi código tiene problemas para hacer algo como refiriéndose al archivo R.java?

R.java does have 
    public static final class id { 
     public static final int button1=0x7f080001; 
     public static final int menu_settings=0x7f080003; 
     public static final int textView1=0x7f080000; 
     public static final int textView2=0x7f080002; 

Gracias de antemano.

Respuesta

15

Llama al findViewById como parte de la definición de su campo, momento en el que el diseño no está inflado (eso ocurre cuando llama al setContentView). findViewById no encuentra la vista, por lo que la referencia se establece en null.

Moviendo sus llamadas findViewById dentro de onCreate, después de llamar al setContentView debería arreglarlo.

+0

Ah, eso fue todo. ¡Gracias por tu ayuda! – ajskhan

+0

Claro. Debería "aceptar" la respuesta si responde completamente la pregunta. Tenga en cuenta que el porcentaje de respuestas aceptadas se muestra debajo de su nombre en la tarjeta de perfil en Stack Overflow, y que con un porcentaje más alto probablemente obtenga más y mejores respuestas. –

+0

Hecho. Gracias. – ajskhan

Cuestiones relacionadas