2012-07-01 27 views
6

Tôi nhận được thông báo lỗi sau khi chạy ứng dụng cơ bản của mình. Ứng dụng này bao gồm một nút gọi là button1 và một textView được gọi là topLeft.Phát triển Android mới bắt đầu: vấn đề 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 

Khi cố gắng để sử dụng findViewById, lỗi này đi lên đề cập đến dòng 28.

Chương trình trông giống như sau:

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 

    }  

} 

này có nghĩa là gì? Tại sao mã của tôi gặp sự cố khi thực hiện điều gì đó dọc theo các dòng đề cập đến tệp 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; 

Xin cảm ơn trước.

Trả lời

15

Bạn đang gọi số findViewById như một phần của định nghĩa trường, tại thời điểm đó bố cục không được tăng cao (điều đó xảy ra khi bạn gọi setContentView). findViewById không tìm thấy chế độ xem, vì vậy tham chiếu đang được đặt thành null.

Di chuyển các cuộc gọi findViewById bên trong của onCreate, sau khi gọi setContentView nên khắc phục sự cố.

+0

Ah, điều đó đã xảy ra. Cảm ơn bạn đã giúp đỡ! – ajskhan

+0

Chắc chắn. Bạn nên "chấp nhận" câu trả lời nếu nó trả lời đầy đủ câu hỏi. Lưu ý rằng tỷ lệ phần trăm các câu trả lời được chấp nhận hiển thị bên dưới tên của bạn trong thẻ hồ sơ trên Stack Overflow và có tỷ lệ phần trăm cao hơn có khả năng sẽ giúp bạn có được câu trả lời tốt hơn và tốt hơn. –

+0

Xong. Cảm ơn bạn. – ajskhan

Các vấn đề liên quan