2012-07-01 15 views
6

Otrzymuję następujący komunikat o błędzie podczas uruchamiania mojej podstawowej aplikacji. Aplikacja składa się z przycisku o nazwie button1 i textView o nazwie topLeft.Początkujący Android Rozwój: findViewById numer

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 

Podczas próby użycia findViewById, błąd ten pojawia się odnosząc się do linii 28.

Program wygląda następująco:

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 

    }  

} 

Co to oznacza? Dlaczego mój kod ma problem z robieniem czegoś podobnego do pliku 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; 

Z góry dziękuję.

Odpowiedz

15

Wywołujesz findViewById jako część definicji pola, w którym to momencie układ nie jest zawyżony (dzieje się tak, gdy zadzwonisz pod numer setContentView). findViewById nie znajduje widoku, więc odniesienie jest ustawiane na null.

Przenoszenie wywołań wewnątrz onCreate, po wywołaniu setContentView powinno to naprawić.

+0

Ah, udało się. Dzięki za pomoc! – ajskhan

+0

Pewnie. Powinieneś "zaakceptować" odpowiedź, jeśli w pełni odpowiada na pytanie. Zwróć uwagę, że procent zaakceptowanych odpowiedzi pokazuje poniżej Twoje imię i nazwisko na karcie profilu w Stack Overflow, a posiadanie wyższego odsetka prawdopodobnie dostarczy Ci więcej lepszych odpowiedzi. –

+0

Gotowe. Dziękuję Ci. – ajskhan