0

Android を使用して 1 つの単純なアプリケーションを作成しましたが、View.Can のいずれかをクリックすると、このアプリケーションがクラッシュします。

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());

}
 }

このエラーの解決策を教えていただけると大変助かります。

4

3 に答える 3

1

ここにはいくつかの問題があります。

1) つまらないことかもしれませんが、ボタンのクリックを処理するよりクリーンな方法は、ビューの andriod:onClick プロパティを XML で定義し、署名 public void myClickHandler(View v) を持つメソッド名と同じに設定することです。その方法では、ビューに基づいてアクションを選択できますが、ビューで == を使用してそれを行うことはできません。代わりに、このようなビュー ID を比較する必要があります

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

2) njzk2 が指摘しているように、if ブロックで {} を使用する (または使用しない) ことに注意してください。現在、if ステートメントの直後の行を条件付きで実行しているだけです。これはおそらくあなたが望むものではありません。

3)入力を検証してください。このコードは現在非常に壊れやすいです(チェックやエラー処理なしで文字列を int に解析しようとしています。これはすぐに壊れます。

4) int プリミティブは言うまでもなく、Integer オブジェクトで toString() を呼び出したくありません。コメントで述べたように、これは意味をなさないため、コンパイルすることさえできません。プリミティブでインスタンスメソッドを呼び出すことはできません。代わりに v1.setText(new String(a3)) または v1.setText(a3 + "") を実行します

于 2012-10-05T16:11:01.987 に答える
0

また、数値を文字列に変換する方法についても読んでおくことをお勧めします。 http://docs.oracle.com/javase/tutorial/java/data/converting.html

于 2012-10-05T16:43:19.017 に答える
0

ここでクラッシュします:

v1.setText(a3.toString());

ifアクションの周りに{}がなく、a3が定義されていないためです。

于 2012-10-05T15:58:19.443 に答える