2012-07-01 15 views
6

Viene visualizzato il seguente messaggio di errore quando si esegue la mia applicazione di base. L'applicazione consiste in un pulsante chiamato button1 e una textView chiamata topLeft.Sviluppo Android per principianti: problema findViewById

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 

Quando si tenta di utilizzare il findViewById, questo errore si riferisce alla linea 28.

Il programma si presenta come il seguente:

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 

    }  

} 

Cosa significa? Perché il mio codice ha difficoltà a fare qualcosa sulla falsariga del riferimento al file 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; 

Grazie in anticipo.

risposta

15

Si sta chiamando findViewById come parte della definizione del campo, a questo punto il layout non è gonfiato (ciò accade quando si chiama setContentView). findViewById non trova la vista, quindi il riferimento è impostato su null.

Spostare le chiamate findViewById all'interno di onCreate, dopo aver chiamato setContentView dovrebbe risolvere il problema.

+0

Ah, l'ha fatto. Grazie per l'aiuto! – ajskhan

+0

Sicuro. Dovresti "accettare" la risposta se risponde completamente alla domanda. Tieni presente che la percentuale di risposte accettate viene visualizzata sotto il tuo nome nella scheda del profilo su Stack Overflow e una percentuale più elevata probabilmente ti darà più risposte migliori. –

+0

Fatto. Grazie. – ajskhan