我使用Android创建了一个简单的应用程序,但是当我点击任何一个View时,这个应用程序崩溃了。你可以帮忙看看下面的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());
}
}
如果您可以为此错误提供一些解决方案,那将非常有用。
答案 0 :(得分:1)
这里有几个问题。
1)nitpick可能但处理按钮点击的一种更简洁的方法是在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(new String(a3))或v1.setText(a3 +“”)
答案 1 :(得分:0)
它在这里崩溃了:
v1.setText(a3.toString());
因为你的if动作周围没有{},并且没有定义a3。
答案 2 :(得分:0)
我还建议阅读将数字转换为字符串。 http://docs.oracle.com/javase/tutorial/java/data/converting.html