package panda.c;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class calculate extends Activity implements OnClickListener {
/** Called when the activity is first created. */
EditText input1,input2;
Button sum;
TextView total;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calcu);
input1 = (EditText) findViewById(R.id.input1);
input2 = (EditText) findViewById(R.id.input2);
total = (EditText) findViewById(R.id.total);
sum = (Button) findViewById(R.id.sum);
sum.setOnClickListener(this);
}
public void onClick(View v) {
int inputt1 = Integer.parseInt(input1.getText().toString());
int inputt2 = Integer.parseInt(input2.getText().toString());
switch (v.getId()) {
case R.id.sum:
sum.setText(Integer.toString(inputt1+inputt2));
break;
default:
break;
}}}
我没有输入任何东西。我只点击了总和,然后程序停止了。但如果我输入所有editText,我点击总和,它的工作。为什么?我想如果我不输入,点击总和,应用程序仍然运行。
答案 0 :(得分:2)
它被称为NullPointerException
。您正在尝试将null
解析为integer
。您需要将解析语句括在try
块和catch
NullPointerException
中,并将一些默认值设置为inputt1
和inputt2
,或通知用户放置Toast
的某些值。
校正
这不是NullPointerException
,而是NumberFormatException
。
答案 1 :(得分:2)
这是因为如果一个字段留空,Integer.parseInt()将失败。如果该字段留空,则应将默认值设置为0,以使其不会强制关闭。
这是一个简单的解决方案,用于检查它是否为空并默认使用0:
int inputt1 = input1.getText().toString().equals("") ? 0 : Integer.parseInt(input1.getText().toString());
int inputt2 = input2.getText().toString().equals("") ? 0 : Integer.parseInt(input2.getText().toString());
另外,将android:inputType="number"
设置为EditText
,这样您就可以将输入限制为仅限于数字。
编辑:更新了代码,使其与所有API级别兼容。
答案 2 :(得分:1)
这是因为您正在使用Integer.parseInt()
并在其中解析""
。这肯定会给你NumberFormat异常。
试试这个......
if(!(input1.getText().toString().trim().equals(""))){
inputt1 = Integer.parseInt(input1.getText().toString());
}
同样适用于其他输入..
希望这有帮助,..
答案 3 :(得分:0)
OnClick()方法中的代码片段如下:
int inputt1 = 0;
int inputt2 = 0;
try {
inputt1 = Integer.parseInt(input1.getText().toString());
inputt2 = Integer.parseInt(input2.getText().toString());
}
catch (NumberFormatException e) {
//notify the user here somehow or just leave empty
//or just return, if you don't want to sum default values
}