Вылетает приложение при нажатии кнопки
У меня приложение калькулятор. При эмуляции на телефоне вылетает, как только нажимаешь на экран. Никаких ошибок в 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 шт):
В вашем XML buttons_layout.xml вы указали кнопкам метод android:onClick="onButtonClicked"
В MainActivity же метод называется onButtonCLicked, большая L в CLicked.
То есть XML файл вызывает несуществующий метод для обработки нажатий.
Решение:
В MainActivity поменяйте название метода на onButtonClicked.
В XML у вас также вызывается метод MyOnClick на других кнопках. Поменяйте MyOnClick на onButtonClicked.