每次我按下结果按钮时应用程序崩溃
App crashes everytime i press result button
E/AndroidRuntime:致命异常:main
进程:com.vineet.calculator,PID:29435
java.lang.NullPointerException:尝试在空对象引用上调用虚方法 'boolean java.lang.Boolean.enter code here
booleanValue()'
在 com.vineet.calculator.MainActivity$16.onClick(MainActivity.java:177)
在 android.view.View.performClick(View.java:6294)
在 android.view.View$PerformClick.run(View.java:24770)
在 android.os.Handler.handleCallback(Handler.java:790)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:164)
在 android.app.ActivityThread.main(ActivityThread.java:6494)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
申请已终止。
**Activity.java**
package com.vineet.calculator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button btn5;
Button btn6;
Button btn7;
Button btn8;
Button btn9;
Button btnResult;
Button btnClear;
Button btnExit;
Button btnAdd;
Button btnSub;
Button btnMul;
Button btnDiv;
EditText etNumber;
TextView tvAnswer;
int val1, val2;
Boolean boolMul, boolAdd, boolSub, boolDiv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn0 = findViewById(R.id.btn0);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn5 = findViewById(R.id.btn5);
btn6 = findViewById(R.id.btn6);
btn7 = findViewById(R.id.btn7);
btn8 = findViewById(R.id.btn8);
btn9 = findViewById(R.id.btn9);
btnAdd = findViewById(R.id.btnAdd);
btnSub = findViewById(R.id.btnSub);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
btnResult = findViewById(R.id.btnResult);
btnClear = findViewById(R.id.btnClear);
btnExit = findViewById(R.id.btnExit);
etNumber = findViewById(R.id.etNumber);
tvAnswer = findViewById(R.id.tvAnswer);
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"9");
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText("");
tvAnswer.setText("");
}
});
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolAdd = true;
etNumber.setText(null);
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolSub = true;
etNumber.setText(null);
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolMul = true;
etNumber.setText("");
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolDiv = true;
etNumber.setText("");
}
});
btnResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val2 = Integer.valueOf(etNumber.getText().toString());
if(boolAdd == true){
tvAnswer.setText(val1 + val2+"");
boolAdd = false;
}
if(boolSub == true){
tvAnswer.setText(val1 - val2 + "");
boolSub = false;
}
}
});
}
}
您正在使用 Boolean
(非原始数据类型)而不是 boolean
。
您必须初始化布尔值才能使用:
Boolean boolMul = new Boolean(false);
同样初始化所有布尔变量或使用布尔值。
使用 "boolean" 而不是 "Boolean"。 Boolean 是一个 class ,它将原始类型 boolean 的值包装在一个对象中。避免使用它,因为与原始类型相比,它需要更多的内存。
此外,许多 setOnclickListeners 在 MainActivity 中实现 View.OnClickListener 而不是编写,并使用 Switch case 来处理按钮点击。
E/AndroidRuntime:致命异常:main
进程:com.vineet.calculator,PID:29435
java.lang.NullPointerException:尝试在空对象引用上调用虚方法 'boolean java.lang.Boolean.enter code here
booleanValue()'
在 com.vineet.calculator.MainActivity$16.onClick(MainActivity.java:177)
在 android.view.View.performClick(View.java:6294)
在 android.view.View$PerformClick.run(View.java:24770)
在 android.os.Handler.handleCallback(Handler.java:790)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:164)
在 android.app.ActivityThread.main(ActivityThread.java:6494)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
申请已终止。
**Activity.java**
package com.vineet.calculator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button btn5;
Button btn6;
Button btn7;
Button btn8;
Button btn9;
Button btnResult;
Button btnClear;
Button btnExit;
Button btnAdd;
Button btnSub;
Button btnMul;
Button btnDiv;
EditText etNumber;
TextView tvAnswer;
int val1, val2;
Boolean boolMul, boolAdd, boolSub, boolDiv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn0 = findViewById(R.id.btn0);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn5 = findViewById(R.id.btn5);
btn6 = findViewById(R.id.btn6);
btn7 = findViewById(R.id.btn7);
btn8 = findViewById(R.id.btn8);
btn9 = findViewById(R.id.btn9);
btnAdd = findViewById(R.id.btnAdd);
btnSub = findViewById(R.id.btnSub);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
btnResult = findViewById(R.id.btnResult);
btnClear = findViewById(R.id.btnClear);
btnExit = findViewById(R.id.btnExit);
etNumber = findViewById(R.id.etNumber);
tvAnswer = findViewById(R.id.tvAnswer);
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText(etNumber.getText()+"9");
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etNumber.setText("");
tvAnswer.setText("");
}
});
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolAdd = true;
etNumber.setText(null);
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolSub = true;
etNumber.setText(null);
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolMul = true;
etNumber.setText("");
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val1 = Integer.valueOf(etNumber.getText().toString());
boolDiv = true;
etNumber.setText("");
}
});
btnResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
val2 = Integer.valueOf(etNumber.getText().toString());
if(boolAdd == true){
tvAnswer.setText(val1 + val2+"");
boolAdd = false;
}
if(boolSub == true){
tvAnswer.setText(val1 - val2 + "");
boolSub = false;
}
}
});
}
}
您正在使用 Boolean
(非原始数据类型)而不是 boolean
。
您必须初始化布尔值才能使用:
Boolean boolMul = new Boolean(false);
同样初始化所有布尔变量或使用布尔值。
使用 "boolean" 而不是 "Boolean"。 Boolean 是一个 class ,它将原始类型 boolean 的值包装在一个对象中。避免使用它,因为与原始类型相比,它需要更多的内存。
此外,许多 setOnclickListeners 在 MainActivity 中实现 View.OnClickListener 而不是编写,并使用 Switch case 来处理按钮点击。