glumking
glumking

Reputation: 13

my button cannot find a method in the MainActivity.java file

Hi i'm a beginner android developer trying to make a basic calculator app

Here is my layout code from the content_main.xml folder:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <TextView
        android:id="@+id/displayer"
        android:text="Hello World!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="113dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-"
        android:id="@+id/minus"
        android:onClick="subtract"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/displayer"
        android:layout_toStartOf="@+id/displayer"
        android:layout_marginRight="39dp"
        android:layout_marginEnd="39dp" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="add"
        android:text="+"
        android:id="@+id/plus"
        android:layout_below="@+id/minus"
        android:layout_alignLeft="@+id/minus"
        android:layout_alignStart="@+id/minus" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:onClick="setNumber"
        android:tag="1"
        android:id="@+id/one"
        android:layout_above="@+id/plus"
        android:layout_toRightOf="@+id/plus"
        android:layout_toEndOf="@+id/plus" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="4"
        android:id="@+id/four"
        android:tag="4"
        android:layout_alignTop="@+id/plus"
        android:layout_toRightOf="@+id/plus"
        android:layout_toEndOf="@+id/plus" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="2"
        android:id="@+id/two"
        android:tag="2"
        android:layout_above="@+id/four"
        android:layout_toRightOf="@+id/one"
        android:layout_toEndOf="@+id/one" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="3"
        android:tag="3"
        android:id="@+id/three"
        android:layout_above="@+id/five"
        android:layout_toRightOf="@+id/two"
        android:layout_toEndOf="@+id/two" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="5"
        android:tag="5"
        android:id="@+id/five"
        android:layout_below="@+id/two"
        android:layout_alignLeft="@+id/two"
        android:layout_alignStart="@+id/two" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="6"
        android:tag="6"
        android:id="@+id/six"
        android:layout_above="@+id/nine"
        android:layout_toRightOf="@+id/five"
        android:layout_toEndOf="@+id/five" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="7"
        android:tag="7"
        android:id="@+id/seven"
        android:layout_below="@+id/plus"
        android:layout_toRightOf="@+id/plus"
        android:layout_toEndOf="@+id/plus" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="8"
        android:tag="8"
        android:id="@+id/eight"
        android:layout_below="@+id/five"
        android:layout_alignLeft="@+id/five"
        android:layout_alignStart="@+id/five" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setNumber"
        android:text="9"
        android:tag="9"
        android:id="@+id/nine"
        android:layout_below="@+id/five"
        android:layout_alignLeft="@+id/six"
        android:layout_alignStart="@+id/six" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="="
        android:id="@+id/equal"
        android:onClick="equal"
        android:layout_below="@+id/plus"
        android:layout_alignLeft="@+id/plus"
        android:layout_alignStart="@+id/plus" />

</RelativeLayout>

Here is my Activity from the MainActivity folder:

package com.example.android.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

private int firstNumber = -1;
private int secondNumber = -1;
private int operation;

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

private void equal(View view){
    TextView displayerTextView=(TextView)
            findViewById(R.id.displayer);
    if (operation == 0) {
        displayerTextView.setText(firstNumber+secondNumber);
    }else if (operation == 1){
        displayerTextView.setText(firstNumber-secondNumber);
    }else{
        displayerTextView.setText("error");
    }
}

private void add(View view){
    operation = 0;
}

private void subtract(View view){
    operation = 1;
}

private void setNumber(View view){
    if (firstNumber == -1) {
        firstNumber = Integer.parseInt((String)view.getTag());
    }else{
        secondNumber = Integer.parseInt((String)view.getTag());
    }
}

}

When I click on the 3 button in my calculator app this error appears here is the error:

java.lang.IllegalStateException: Could not find a method setNumber(View) in       the activity class com.example.android.calculator.MainActivity for onClick handler on view class android.widget.Button with id 'three'

Upvotes: 0

Views: 117

Answers (3)

Vamsi
Vamsi

Reputation: 878

For the issue mentioned, change

private void setNumber(View view){
    if (firstNumber == -1) {
        firstNumber = Integer.parseInt((String)view.getTag());
    }else{
        secondNumber = Integer.parseInt((String)view.getTag());
    }
}

to

public void setNumber(View view){
    if (firstNumber == -1) {
        firstNumber = Integer.parseInt((String)view.getTag());
    }else{
        secondNumber = Integer.parseInt((String)view.getTag());
    }
}

To avoid similar errors in your code with add and subtract, change those functions also from private to public.

Upvotes: 0

user2788843
user2788843

Reputation: 77

It should be public void setNumber(View view){

Upvotes: 0

Mateusz Korwel
Mateusz Korwel

Reputation: 1148

Because you method is private. Change on public.

More you can find here http://developer.android.com/reference/android/widget/Button.html

Upvotes: 1

Related Questions