2016-08-20 125 views
0

首先,我是android SDK的新手,但我在java中有很多經驗。我正在嘗試一個關於SDK的教程來進入它。我完成了寫作所需的一切,但是當我去運行它,應用程序崩潰,我得到這個致命的錯誤:View.OnClickListener導致教程應用程序崩潰

java.lang.NullPointerException: Attempt to invoke virtual method 'void 
android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' 
on a null object reference 

好,確保萬無一失。顯然,View.OnClickListener存在一個問題。拼寫檢查。大寫,檢查。括號,檢查。括號,檢查。分號,檢查。接下來我檢查了View.OnClickListener的文檔。我看到它唯一的方法是onClick(View v)。好吧,一切都很好。 IDE不會給我任何其他錯誤。所以在這一點上,我想我需要外界的幫助。對於全球化志願服務青年,這是按鈕的ID:

android:id="@+id/button" 

這是MainActivity.java

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.content.Intent; 
import android.view.View; 

public class MainActivity extends AppCompatActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v){ 
       goToSecondActivity(); 
      } 
     }); 
    } 

    private void goToSecondActivity() { 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 

這裏是logcat的

08-20 16:00:01.171 2565-2565/com.example.joe.helloworld E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.joe.helloworld, PID: 2565 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.joe.helloworld/com.example.joe.helloworld.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                      at com.example.joe.helloworld.MainActivity.onCreate(MainActivity.java:16) 
                      at android.app.Activity.performCreate(Activity.java:6237) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:148)  
                      at android.app.ActivityThread.main(ActivityThread.java:5417)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

回答

2

你忘了打電話給setContentView()與佈局包含Button的ID。

由於沒有內容佈局,致電findViewById()返回null

+0

葉氏..你是對的。我專注於編寫的代碼,一切似乎不錯..沒想到的是丟失了行(Y ) –

+0

是的,這是它。謝謝! – onyex

0

您忘記設置用戶查看的佈局: setContentView(R.layout.activity_main);

而且除了使用的:

button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v){ 
      goToSecondActivity(); 
     } 
    }); 

}

只要使用此:

button.setOnClickListener(new Button.OnClickListener() 
    { 
     @Override 
     public void onClick(View v){ 
      goToSecondActivity(); 
     } 
    }); 

}

這意味着內部setOnClickListener使用新Button.OnClickListener而不是觀。 OnClickListener

+0

那有什麼好處?我使用: button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ }} –

0
setContentView(R.layout.activity_main); 

右後super.onCreate(...)