2012-08-27 74 views
0

嗨。我試圖爲Android創建一個計算器應用程序。試圖編碼顯示兩個按鈕,以便點擊其中一個按鈕將其顯示在文本框中。java.lang.RuntimeException:無法啓動活動ComponentInfo {com.test.cal/com.test.cal.CalculatorActivity}:java.lang.NullPointerException

的代碼是:

package com.test.cal; 

android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class CalculatorActivity extends Activity implements OnClickListener { 
    EditText ans; 
    Button b1,b2; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     ans = (EditText) findViewById(R.id.ans); 
     b1=(Button) findViewById(R.id.one); 
     b2=(Button) findViewById(R.id.two); 
     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     switch(arg0.getId()) 
     { 
     case R.id.one: 
       ans.setText(1); 
      break; 
     case R.id.two: 
       ans.setText(2); 
      break; 
     default:Toast.makeText(this, "fuckoff", 1000); 
      break; 
     } 
    } 
    } 

點擊零點異常轉到:

b2=(Button) findViewById(R.id.two); 

線。請幫忙。我是一名初學者。搜索堆棧溢出,但不明白與它相關的幾個答案。

+0

公共無效的onCreate(捆綁savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); – Akram

回答

4

其實,所有的意見都,因爲你之前setContentView(R.layout.main);

代碼只是改變路線試圖定義(訪問)的意見,

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ans = (EditText) findViewById(R.id.ans); 
     b1=(Button) findViewById(R.id.one); 
     b2=(Button) findViewById(R.id.two); 
     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 

    } 

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

訪問您的main.xml中定義的視圖文件..

1

訪問所定義的視圖(按鈕和的EditText的初始化)之前將以下代碼

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

在setContentView(R.layout.main)之後添加下面的代碼很重要。否則你會得到一個異常,你的應用程序將崩潰。原因在於,在使用View之前,您無法使用findViewById(),因爲在此調用之前UI不存在。

ans = (EditText) findViewById(R.id.ans); 
b1=(Button) findViewById(R.id.one); 
b2=(Button) findViewById(R.id.two); 
b1.setOnClickListener(this); 
b2.setOnClickListener(this); 
1

呼叫

setContentView(R.layout.main); 

之前試圖訪問你的按鈕和編輯文本

public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ans = (EditText) findViewById(R.id.ans); 
     b1=(Button) findViewById(R.id.one); 
     b2=(Button) findViewById(R.id.two); 
     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 
    } 
2

請更改OnCreate中。這樣寫

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ans = (EditText) findViewById(R.id.ans); 
     b1=(Button) findViewById(R.id.one); 
     b2=(Button) findViewById(R.id.two); 
     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 

    } 
+0

好的......夥計........ – ckpatel

相關問題