简单的Android SUM和乘法应用程序在AVD上崩溃



我使用Android创建了一个简单的应用程序,但当我点击任何视图时,这个应用程序都会崩溃。你能帮助我了解MainActivity.java:的以下代码吗

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

如果你能为这个错误提供一些解决方案,那将是非常有帮助的。

这里有几个问题。

1) 也许是挑剔,但处理按钮单击的更干净的方法是在XML中定义视图的andriod:onClick属性,并将其设置为具有签名public void myClickHandler(View v)的方法名。在该方法中,您可以根据视图选择操作,但不能在视图上使用==。相反,你需要像这个一样比较视图ID

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

2) 正如njzk2所指出的,在if块上使用(或不使用){}时要小心。现在,您只是有条件地执行if语句后面的行。这可能不是你想要的。

3) 请验证输入,此代码现在非常脆弱(您正试图在没有任何检查或错误处理的情况下将字符串解析为int。这肯定会很快中断。

4) 您不希望对Integer对象调用toString(),更不用说对int基元了。正如我在评论中提到的,这甚至不应该编译,因为它没有意义——你不能在基元上调用任何实例方法。相反,执行v1.setText(新字符串(a3))或v1.setTText(a3+")

它在这里崩溃:

v1.setText(a3.toString());

因为在if操作中没有{},并且a3没有定义。

我还建议阅读将数字转换为字符串的相关知识。http://docs.oracle.com/javase/tutorial/java/data/converting.html

相关内容

最新更新