Вылетает приложение при нажатии кнопки

У меня приложение калькулятор. При эмуляции на телефоне вылетает, как только нажимаешь на экран. Никаких ошибок в run не выдает. Код очень длинный, но все же покажу.

activity_main.xml:

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

    <include
        layout="@layout/item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimaryDark"
        android:layout_gravity="bottom">
        <include
            layout="@layout/buttons_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </RelativeLayout>

</LinearLayout>

buttons_layout.xml:

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

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:rowCount="5"
        android:columnCount="4">
        <Button
            android:id="@+id/clear_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="C"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:onClick="onButtonClicked"/>

        <Button
            android:id="@+id/power_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="^"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="0"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:onClick="onButtonClicked"/>

        <Button
        android:id="@+id/percent_btn"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:text="%"
        android:textColor="@color/white"
        android:background="@color/colorPrimaryDark"
        android:textSize="25sp"
        android:layout_row="0"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:onClick="onButtonClicked"/>

        <Button
            android:id="@+id/division_btn"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:text="/"
        android:textColor="@color/white"
        android:background="@color/colorPrimaryDark"
        android:textSize="25sp"
        android:layout_row="0"
        android:layout_column="3"
        android:layout_columnWeight="1"
        android:onClick="onButtonClicked"/>

        <Button
            android:id="@+id/btn7"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="7"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:onClick="onButtonClicked"/>

        <Button
            android:id="@+id/btn8"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="8"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:onClick="MyOnCLick"/>

        <Button
            android:id="@+id/btn9"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="9"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/multiply_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="*"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="1"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn4"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="4"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="2"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn5"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="5"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn6"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="6"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="2"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/substraction_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="-"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="2"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="1"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="3"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="2"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="3"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn3"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="3"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="3"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/addition_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="+"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="3"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btn0"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="0"
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="4"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/btnpoint"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="."
            android:textColor="@color/white"
            android:background="@color/colorPrimaryDark"
            android:textSize="25sp"
            android:layout_row="4"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:onClick="MyOnClick"/>

        <Button
            android:id="@+id/equal_btn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="4"
            android:layout_column="2"
            android:layout_columnSpan="2"
            android:layout_columnWeight="1"
            android:background="@color/pink"
            android:onClick="MyOnClick"
            android:text="="
            android:textColor="@color/white"
            android:textSize="25sp" />



    </GridLayout>

</RelativeLayout>

item.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="wrap_content"
    android:background="@color/colorPrimaryDark">

    <TextView
        android:id="@+id/input_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="40sp"
        android:textColor="@color/white"
        android:padding="10dp"
        android:layout_gravity="end"/>

    <TextView
        android:id="@+id/output_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="60sp"
        android:textColor="@color/white"
        android:padding="10dp"
        android:layout_gravity="end"/>


</LinearLayout>

MainActivity.java:

package com.example.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView inputText , outputText;

    private String input , output , newOutput;

    private Button button0 , button1 , button2 , button3 , button4 , button5 , button6 ,
            button7 , button8 , button9, buttonAdd , buttonMultiply , buttonSubs,
            buttonDivision , buttonPoint , buttonPercent , buttonPower , buttonEqual ,
            buttonClear;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inputText = findViewById(R.id.input_text);
        outputText = findViewById(R.id.output_text);

        button0 = findViewById(R.id.btn0);
        button1 = findViewById(R.id.btn1);
        button2 = findViewById(R.id.btn2);
        button3 = findViewById(R.id.btn3);
        button4 = findViewById(R.id.btn4);
        button5 = findViewById(R.id.btn5);
        button6 = findViewById(R.id.btn6);
        button7 = findViewById(R.id.btn7);
        button8 = findViewById(R.id.btn8);
        button9 = findViewById(R.id.btn9);
        buttonAdd = findViewById(R.id.addition_btn);
        buttonMultiply = findViewById(R.id.multiply_btn);
        buttonSubs = findViewById(R.id.substraction_btn);
        buttonDivision = findViewById(R.id.division_btn);
        buttonPoint = findViewById(R.id.btnpoint);
        buttonPercent = findViewById(R.id.percent_btn);
        buttonPower = findViewById(R.id.power_btn);
        buttonEqual = findViewById(R.id.equal_btn);
        buttonClear = findViewById(R.id.clear_btn);
    }

        public void onButtonCLicked(View view){
        Button button  = (Button) view;
        String data = button.getText().toString();
        switch (data){
            case "C":
                input=null;
                output=null;
                newOutput=null;
                outputText=null;
                break;
            case "^":
                solve();
                input = input + "^";
                break;
            case "*":
                solve();
                input+="*";
                break;
            case "=":
                solve();
                break;
            case "%":
                input+="%";
                double d = Double.parseDouble(inputText.getText().toString())/100;
                outputText.setText(String.valueOf(d));
                break;

            default:
                if (input == null){
                    input = "";
                }
                if (data.equals("+") || data.equals("/") || data.equals("-")){
                    solve();}
                input+=data;

        }
        inputText.setText(input);
        }

    private void solve(){
if (input.split("\\+").length==2){
    String numbers [] = input.split("\\+");
    try {
        double d = Double.parseDouble(numbers[0]) + Double.parseDouble(numbers[1]);
        output = Double.toString(d);
        newOutput = cutDecimal(output);
        outputText.setText(newOutput);
        input = d +"";
    }catch (Exception e){
        outputText.setError(e.getMessage().toString());
    }
}

        if (input.split("\\*").length==2){
            String numbers [] = input.split("\\*");
            try {
                double d = Double.parseDouble(numbers[0]) * Double.parseDouble(numbers[1]);
                output = Double.toString(d);
                newOutput = cutDecimal(output);
                outputText.setText(newOutput);
                input = d +"";
            }catch (Exception e){
                outputText.setError(e.getMessage().toString());
            }
        }

        if (input.split("\\/").length==2){
            String numbers [] = input.split("\\/");
            try {
                double d = Double.parseDouble(numbers[0]) / Double.parseDouble(numbers[1]);
                output = Double.toString(d);
                newOutput = cutDecimal(output);
                outputText.setText(newOutput);
                input = d +"";
            }catch (Exception e){
                outputText.setError(e.getMessage().toString());
            }
        }

        if (input.split("\\^").length==2){
            String numbers [] = input.split("\\^");
            try {
                double d = Math.pow(Double.parseDouble(numbers[0]), Double.parseDouble(numbers[1]));
                output = Double.toString(d);
                newOutput = cutDecimal(output);
                outputText.setText(newOutput);
                input = d +"";
            }catch (Exception e){
                outputText.setError(e.getMessage().toString());
            }
        }

        if (input.split("\\-").length==2){
            String numbers [] = input.split("\\-");
            try {
                if (Double.parseDouble(numbers[0]) < Double.parseDouble(numbers[1])){
                    double d = Double.parseDouble(numbers[1]) - Double.parseDouble(numbers[0]);
                    output = Double.toString(d);
                    newOutput = cutDecimal(output);
                    outputText.setText("-" + newOutput);
                    input = d +"";
                }
                else {
                    double d = Double.parseDouble(numbers[0]) - Double.parseDouble(numbers[1]);
                    output = Double.toString(d);
                    newOutput = cutDecimal(output);
                    outputText.setText(newOutput);
                    input = d + "";
                }
            }catch (Exception e){
                outputText.setError(e.getMessage().toString());
            }
        }
        
    }
    private String cutDecimal(String number){
        String n [] = number.split("\\.");
        if (n.length > 1) {
            if (n[1].equals("0")){
                number = n[0];
            }
        }
        return number;
    }
}

Я новичок, в колледже учусь. Так что, пожалуйста, объясните подробнее, если заметили проблему, или знаете, как решить. Спасибо, Виктория.


Ответы (1 шт):

Автор решения: avoloshinn

В вашем XML buttons_layout.xml вы указали кнопкам метод android:onClick="onButtonClicked"
В MainActivity же метод называется onButtonCLicked, большая L в CLicked.
То есть XML файл вызывает несуществующий метод для обработки нажатий.
Решение:
В MainActivity поменяйте название метода на onButtonClicked.
В XML у вас также вызывается метод MyOnClick на других кнопках. Поменяйте MyOnClick на onButtonClicked.

→ Ссылка