2012-10-05 82 views
0

我一直使用的是Android,但該應用程序崩潰,當我點擊任何View.Can的你請在下方MainActivity.java的代碼幫助上創建一個簡單的應用:簡單的Android SUM和乘法應用程序崩潰的AVD

public class CalculatorMainActivity extends Activity implements OnClickListener{ 
int a3 =0, a1=0,a2 =0; 
Button b1,b2; 
    EditText t1,t2; 
TextView v1; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_calculator_main); 

    b1=(Button) findViewById(R.id.mul); 
    b2=(Button) findViewById(R.id.sum); 
    t1 = (EditText) findViewById(R.id.editText1); 
    t2 = (EditText) findViewById(R.id.editText2); 
    v1 = (TextView) findViewById(R.id.text1); 

    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 
    t1.setOnClickListener(this); 
    t2.setOnClickListener(this); 
    v1.setOnClickListener(this); 

}

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_calculator_main, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    String s1 = t1.getText().toString(); 

    a1 = Integer.parseInt(s1); 

    String s2 = t2.getText().toString(); 
    a2 = Integer.parseInt(s2); 

    if (v == b1) 
    a3 = a1 + a2; 
    v1.setText(a3.toString()); 
    if (v == b2) 
    a3 = a1 * a2; 
    v1.setText(a3.toString()); 

} 
} 

這將是非常有益的,如果你可以提供一些解決這個錯誤。

+0

發表你的崩潰,你的'R.layout.activity_calculator_main' – Tim

+0

後一個完整的堆棧跟蹤 – njzk2

回答

0

它崩潰的位置:

v1.setText(a3.toString()); 

,因爲你沒有{}在你如果動作,並沒有定義A3。

+1

A3被定義爲一種原始的INT ....的logcat的「INT A3 = 0,A1 = 0,A2 = 0 ; 「這個應該不會編譯 –

+0

好吧,沒有看到。那麼可能是一個解析錯誤 – njzk2

1

這裏有幾個問題。

1)nitpick可能,但更簡單的處理按鈕點擊的方法是定義XML中視圖的andriod:onClick屬性,並將其設置爲帶有簽名的方法名稱public void myClickHandler(View v)。在該方法中,您可以根據視圖選擇操作,但不能在視圖上使用==來執行此操作。相反,你需要的視圖ID的比較這樣

if(v.getId() == v1.getId()) 

2)njzk2所指出的,要小心使用(或不使用){}您如果塊。現在你只是有條件地在if語句之後執行該行。這可能不是你想要的。

3)請請驗證輸入,這個代碼是非常脆弱的,現在(你試圖解析字符串爲int沒有任何檢查或錯誤處理,這勢必會迅速突破。

4)您不想在Integer對象上調用toString(),更不用說int基元。正如我在我的評論中提到的,這甚至不應該編譯,因爲它沒有任何意義 - 你不能在基元上調用任何實例方法。相反,做v1.setText(新字符串(a3))或v1.setText(a3 +「」)