我已经制作了一个计算器,将来自用户的两个数字相加.num1和num2是提供给用户以接收用户数字的edittexts.Result是一个在屏幕上显示结果的textview。输入是两个整数,但是如果instance(5 + null)或(null + 2)应用程序其中之一为null,应用程序将给出错误并关闭自身。我的错误在哪里?这是我尝试过的
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
TextView result;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1=(EditText)findViewById(R.id.number1);
num2=(EditText)findViewById(R.id.number2);
result=(TextView) findViewById(R.id.result);
}
public void plus(View view) {
int a = Integer.parseInt(num1.getText().toString());
int b = Integer.parseInt(num2.getText().toString());
if(num1.getText().toString()==null)
{
a=0;
}
if(num2.getText().toString()==null)
{
b=0;
}
int sum2 = a + b;
result.setText(" " + sum2);
}
答案 0 :(得分:1)
每次将字符串解析为数字时,都必须使用try / catch。这将捕获任何分析错误,包括空字符串:
public void plus(View view) {
int a = 0;
int b = 0;
try {
a = Integer.parseInt(num1.getText().toString().trim());
} catch (NumberFormatException e) { }
try {
b = Integer.parseInt(num2.getText().toString().trim());
} catch (NumberFormatException e) { }
int sum2 = a + b;
result.setText("" + sum2);
}
答案 1 :(得分:0)
我认为您需要先检查EditText是否包含数据,然后再尝试将字符串解析为int。
您在代码中所做的操作是错误的,因为您调用了EditText内部没有任何值的getText()方法,从而试图将值“ null”解析为一个int。尝试将非数字值解析为int会引发异常,从而导致应用崩溃。
P.s .:您可能会在Android Studio底部的Logcat窗口中看到抛出的异常。
希望我的回答对您有所帮助。
答案 2 :(得分:0)
public void plus(View view) {
try{
int a = Integer.parseInt(num1.getText().toString());
int b = Integer.parseInt(num2.getText().toString());
}
catch(NumberFormatterException e){
if(num1.getText().toString()==null)
{
a=0;
}
if(num2.getText().toString()==null)
{
b=0;
}
}
int sum2 = a + b;
result.setText(" " + sum2);
}
答案 3 :(得分:0)
尝试:
Aug 13 16:07:55 localhost haproxy[12619]: 172.17.107.2:39572 [13/Aug/2018:16:07:55.098] www-http default/racktables 2/0/0/38/40 304 195 - - ---- 6/6/0/1/0 0/0 "GET /index.php?module=chrome&uri=pix/favicon.ico HTTP/1.1"
Aug 13 16:08:08 localhost haproxy[12619]: 172.17.107.2:39584 [13/Aug/2018:16:08:08.745] www-http prueba2/<NOSRV> 0/-1/-1/-1/0 302 121 - - LR-- 0/0/0/0/3 0/0 "GET /rack HTTP/1.1"
也转到XML的EditText并在EditText中设置InputType-> number 它也会正常工作
答案 4 :(得分:0)
您可以使用0值初始化变量a和b fist,然后为num1和num2检查null。请参考以下代码:
public void plus(View view) {
int a = 0;
int b = 0;
if (num1 != null && num1.getText() != null && num1.getText().toString() != "") {
a = Integer.parseInt(num1.getText().toString());
}
if (num2 != null && num2.getText() != null && num2.getText().toString() != "") {
b = Integer.parseInt(num2.getText().toString());
}
int sum2 = a + b;
result.setText(" " + sum2);
}
答案 5 :(得分:-1)
public void onClick(View view) {
int n1 = 0, n2 = 0;
try {
n1 = Integer.parseInt(num1.getText().toString());
}
catch(NumberFormatException e) {
if (num1.getText().toString() == null) {
n1 = 0;
}
}
try {
n2 = Integer.parseInt(num2.getText().toString());
}
catch(NumberFormatException e) {
if (num2.getText().toString() == null) {
n2 = 0;
}
}
int sum = n1 + n2;
result.setText("Answer : " + String.valueOf(sum));
}
如果有任何空白字段,这就是处理异常的方法。希望对您有所帮助。