Android Studio按钮点击后闪退是咋回事?

写了一个计算器,写了一部分Mainactivity代码,然后模拟机调试 点击按钮后闪退了,这是为啥啊?没搜到相关的解决办法,有人说是逻辑错误but代码没报红出错🧐好懵啊

MainActivity.java代码如下:

package com.example.calculatortest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    //显示计算过程及结果
    private EditText et_show;
    //各个按钮
    private Button one,two,three,four,five,six,seven,eight,nine,zero,
            clear,backspace,add,sub,mul,div,point,equal,percent,sqrt;
    //输入的第一个数和第二个数
    double num1= 0 ,num2= 0;
    //计算结果
    double result = 0;
    //用来判断是哪一种运算
    public int flag=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText et_show=(EditText)findViewById(R.id.et_show);
        //数字0~9
        Button zero=(Button)findViewById(R.id.zero);
        Button one=(Button)findViewById(R.id.one);
        Button two=(Button)findViewById(R.id.two);
        Button three=(Button)findViewById(R.id.three);
        Button four=(Button)findViewById(R.id.four);
        Button five=(Button)findViewById(R.id.five);
        Button six=(Button)findViewById(R.id.six);
        Button seven=(Button)findViewById(R.id.seven);
        Button eight=(Button)findViewById(R.id.eight);
        Button nine=(Button)findViewById(R.id.nine);
        //清空&退格
        Button clear=(Button)findViewById(R.id.clear);
        Button backspace=(Button)findViewById(R.id.bksp);
        //运算符
        Button add=(Button)findViewById(R.id.add);
        Button sub=(Button)findViewById(R.id.sub);
        Button mul=(Button)findViewById(R.id.mul);
        Button div=(Button)findViewById(R.id.div);
        Button point=(Button)findViewById(R.id.point);
        Button equal=(Button)findViewById(R.id.equal);
        Button percent=(Button)findViewById(R.id.percent);
        Button sqrt=(Button)findViewById(R.id.sqrt);
        //设置监听事件,为所有按钮设置同一个监听器
        zero.setOnClickListener(new ButtonListener());
        one.setOnClickListener(new ButtonListener());
        two.setOnClickListener(new ButtonListener());
        three.setOnClickListener(new ButtonListener());
        four.setOnClickListener(new ButtonListener());
        five.setOnClickListener(new ButtonListener());
        six.setOnClickListener(new ButtonListener());
        seven.setOnClickListener(new ButtonListener());
        eight.setOnClickListener(new ButtonListener());
        nine.setOnClickListener(new ButtonListener());
        clear.setOnClickListener(new ButtonListener());
        backspace.setOnClickListener(new ButtonListener());
        add.setOnClickListener(new ButtonListener());
        sub.setOnClickListener(new ButtonListener());
        mul.setOnClickListener(new ButtonListener());
        div.setOnClickListener(new ButtonListener());
        equal.setOnClickListener(new ButtonListener());
        percent.setOnClickListener(new ButtonListener());
        sqrt.setOnClickListener(new ButtonListener());

    }
    class ButtonListener implements View.OnClickListener{
        public void onClick(View v){
          //用switch()方法判断点击的按钮id
            switch(v.getId()){
                case R.id.clear:
                    et_show.setText(null);
                    break;
                case R.id.zero:
                    String str0 = et_show.getText().toString();
                    str0+="0";
                    et_show.setText(str0);
                case R.id.one:
                    String str1 = et_show.getText().toString();
                    str1+="1";
                    et_show.setText(str1);
                case R.id.two:
                    String str2 = et_show.getText().toString();
                    str2+="2";
                    et_show.setText(str2);
                case R.id.three:
                    String str3 = et_show.getText().toString();
                    str3+="3";
                    et_show.setText(str3);
                case R.id.four:
                    String str4 = et_show.getText().toString();
                    str4+="4";
                    et_show.setText(str4);
                case R.id.five:
                    String str5 = et_show.getText().toString();
                    str5+="5";
                    et_show.setText(str5);
                case R.id.six:
                    String str6 = et_show.getText().toString();
                    str6+="6";
                    et_show.setText(str6);
                case R.id.seven:
                    String str7 = et_show.getText().toString();
                    str7+="7";
                    et_show.setText(str7);
                case R.id.eight:
                    String str8 = et_show.getText().toString();
                    str8+="8";
                    et_show.setText(str8);
                case R.id.nine:
                    String str9 = et_show.getText().toString();
                    str9+="9";
                    et_show.setText(str9);
                case R.id.point:
                    String str_point = et_show.getText().toString();
                    str_point+=".";
                    et_show.setText(str_point);
                case R.id.add:
                    String str_add = et_show.getText().toString();
                    if(str_add.equals(null)){
                        return;
                    }
                    num1 = Double.valueOf(str_add);
                    et_show.setText(null);
                    flag = 1;
                    break;
                case R.id.sub:
                    String str_sub = et_show.getText().toString();
                    if(str_sub.equals(null)){
                        return;
                    }
                    num1 = Double.valueOf(str_sub);
                    et_show.setText(null);
                    flag = 2;
                    break;
                case R.id.mul:
                    String str_mul = et_show.getText().toString();
                    if(str_mul.equals(null)){
                        return;
                    }
                    num1 = Double.valueOf(str_mul);
                    et_show.setText(null);
                    flag = 3;
                    break;
                case R.id.div:
                    String str_div = et_show.getText().toString();
                    if(str_div.equals(null)){
                        return;
                    }
                    num1 = Double.valueOf(str_div);
                    et_show.setText(null);
                    flag = 4;
                    break;
                case R.id.equal:
                     String str_equal = et_show.getText().toString();
                     num2 = Double.valueOf(str_equal);
                     et_show.setText(null);
                     switch (flag){
                         case 1:
                             result = num1+num2;
                             et_show.setText(String.valueOf(num1)+"+"+String.valueOf(num2)+"="+String.valueOf(result));
                             break;
                         case 2:
                             result = num1-num2;
                             et_show.setText(String.valueOf(num1)+"-"+String.valueOf(num2)+"="+String.valueOf(result));
                             break;
                         case 3:
                             result = num1*num2;
                             et_show.setText(String.valueOf(num1)+"×"+String.valueOf(num2)+"="+String.valueOf(result));
                             break;
                         case 4:
                            if(num2==0){
                                et_show.setText("被除数不能为0!");
                            }else{
                                result = num1/num2;
                                et_show.setText(String.valueOf(num1)+"÷"+String.valueOf(num2)+"="+String.valueOf(result));
                            }
                            break;
                         default:
                             result = 0;
                             break;

                     }

            }
        }
    }

}

activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_show"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:textSize="40sp"
        android:enabled="false"/>

    <GridLayout
        android:layout_width="330dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:columnCount="4"
        android:rowCount="5"
        android:layout_marginTop="15dp">

        <Button
            android:id="@+id/add"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:textSize="25sp"
            android:text="+"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/sub"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:textSize="25sp"
            android:text="-"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/mul"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:textSize="25sp"
            android:text="×"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/div"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:textSize="25sp"
            android:text="÷"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/seven"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="7"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/eight"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="8"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/nine"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="9"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/clear"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="C"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/four"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="4"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/five"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="5"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/six"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="6"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/bksp"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="bksp"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/one"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="1"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/two"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="2"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/three"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="3"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/percent"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="%"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/sqrt"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="√"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/zero"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="0"
            android:textColor="#000000"/>
        <Button
            android:id="@+id/point"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="."
            android:textColor="#000000"/>
        <Button
            android:id="@+id/equal"
            android:background="@drawable/btn_shape"
            android:layout_width="72dp"
            android:layout_height="72dp"
            android:layout_marginTop="8dp"
            android:textSize="25sp"
            android:text="="
            android:textColor="#000000"/>

    </GridLayout>

</LinearLayout>

模拟器运行效果图:
(用转换软件转换了下gif,有水印别介意)

img

首先闪退肯定是报错了,提问请把日志发出来。光说闪退,怎么解决问题,日志都没有我不明白你是怎么百度的。
然后你这个一看就知道是空指针错误了,你定义一个全局变量et_show,又定义一个局部变量et_show,只初始化了局部变量et_show。
点击事件中使用的是全局et_show,肯定会报错。建议巩固下java基础。

题主代码写的很漂亮,但是效率低。
让所有click事件公用一个click事件处理函数想法没问题。写法有问题。 按照题主写的每个onclick 事件都会持有一个包含所有click处理逻辑的函数体。明显是冗余。

        zero.setOnClickListener(this);
        one.setOnClickListener(this);
        two.setOnClickListener(this);
        ...
        ...

上面这样更合理。

点击报错原因。和一楼解答一致。