【问题标题】:App crashes everytime i press result button每次我按下结果按钮时应用程序都会崩溃
【发布时间】:2018-06-17 18:06:33
【问题描述】:

E/AndroidRuntime: 致命异常: main 进程:com.vineet.calculator,PID:29435 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.lang.Boolean.enter code herebooleanValue()” 在 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;
                }

            }
        });

    }
}

【问题讨论】:

  • 为什么是if(boolAdd == true)?为什么不if(boolAdd)

标签: android calculator


【解决方案1】:

您使用的是Boolean(非原始数据类型)而不是boolean

您必须初始化布尔值才能使用:

Boolean boolMul = new Boolean(false);

类似地初始化所有布尔变量或使用布尔变量。

【讨论】:

    【解决方案2】:

    使用“布尔”而不是“布尔”。 Boolean 是一个类,它将原始类型 boolean 的值包装在一个对象中。避免使用它,因为它比原始类型占用更多内存。

    另外,不用编写太多 setOnclickListener 在 MainActivity 中实现 View.OnClickListener 并使用 Switch case 来处理按钮点击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-14
      • 2011-06-05
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多