2013-06-22 48 views
1

我是一個noob,我有使用搜索功能來獲得答案,但我沒有找到任何東西,所以我有我的代碼在Android工作室我的nexus 7作爲一個真正的設備來測試它,但每次我嘗試運行它,在我的Nexus它說,它是直接結束出現一條消息:S
通過點擊號碼添加到TextView的按鈕,基本計算器 這裏是我的代碼:爲什麼我的應用程序總是崩潰?

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

public class MainActivity extends Activity { 
int actuel; 
Button btn0 = (Button) findViewById(R.id.btn0); 
Button btn1 = (Button) findViewById(R.id.btn1); 
Button btn2 = (Button) findViewById(R.id.btn2); 
Button btn3 = (Button) findViewById(R.id.btn3); 
Button btn4 = (Button) findViewById(R.id.btn4); 
Button btn5 = (Button) findViewById(R.id.btn5); 
Button btn6 = (Button) findViewById(R.id.btn6); 
Button btn7 = (Button) findViewById(R.id.btn7); 
Button btn8 = (Button) findViewById(R.id.btn8); 
Button btn9 = (Button) findViewById(R.id.btn9); 
TextView output = (TextView) findViewById(R.id.textView); 

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

    btn0.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(0,view); 
     } 
    }); 
    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(1,view); 
     } 
    }); 
    btn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(2,view); 
     } 
    }); 
    btn3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(3,view); 
     } 
    }); 
    btn4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(4,view); 
     } 
    }); 
    btn5.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(5,view); 
     } 
    }); 
    btn6.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(6,view); 
     } 
    }); 
    btn7.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(7,view); 
     } 
    }); 
    btn8.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(8,view); 
     } 
    }); 
    btn9.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNumbers(9,view); 
     } 
    }); 

} 

private final void addNumbers(int num, View view){ 
    actuel = actuel * 10 + num; 
    output.setText(String.valueOf(actuel)); 
} 

} 
+1

粘貼崩潰日誌... – Plato

+2

要進一步解釋柏拉圖的答案......您正在聲明並試圖初始化您的按鈕(在'Activity'的主要部分使用'findViewById(...)'')類。在調用'setContentView(...)'的地方調用'onCreate(...)'之前會發生這種情況。在你設置了內容視圖之前,任何對'findViewById(...)'的調用都會返回null,並且在你第一次嘗試使用你的按鈕時會導致一個'NullPointerException'(和崩潰)。 – Squonk

回答

2

將代碼更新爲:

public class MainActivity extends Activity { 
int actuel; 
Button btn0 = null; 
Button btn1 = null; 
Button btn2 = null; 
Button btn3 = null; 
Button btn4 = null; 
Button btn5 = null; 
Button btn6 = null; 
Button btn7 = null; 
Button btn8 = null; 
Button btn9 = null; 
TextView output = null; 

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

     btn0 = (Button) findViewById(R.id.btn0); 
     btn1 = (Button) findViewById(R.id.btn1); 
     btn2 = (Button) findViewById(R.id.btn2); 
     btn3 = (Button) findViewById(R.id.btn3); 
     btn4 = (Button) findViewById(R.id.btn4); 
     btn5 = (Button) findViewById(R.id.btn5); 
     btn6 = (Button) findViewById(R.id.btn6); 
     btn7 = (Button) findViewById(R.id.btn7); 
     btn8 = (Button) findViewById(R.id.btn8); 
     btn9 = (Button) findViewById(R.id.btn9); 
     output = (TextView) findViewById(R.id.textView); 
     ... 

您的應用崩潰了beca使用你所有的btnX,輸出變量爲空。

+0

謝謝,它的工作原理:D這麼容易:) – greenhalos

+0

很酷,現在設置這個問題爲答案關閉它:) – Plato

相關問題