0

Im making app for adding two numbers iin android studio. im trying to assign a function Calculate() to a button for calculating using the onClick attribute from xml. Im getting an error 'invalid start of expression' when im putting the attributes (View view) in the Calculate() function.

Here is my Java and xml code ::

`package com.example.logintypeapp;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private Button button;
    private TextView textView;
    private TextView DisplayView;
    private EditText editText;

    private EditText num2;
    private EditText num1;
    private View view;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        num1= findViewById(R.id.num1);
        num2= findViewById(R.id.num1);
        DisplayView = findViewById(R.id.DIsplayView);


public void Calculate(View view){
            String n1=num1.getText().toString();
            String n2=num2.getText().toString();
            int num1=Integer.parseInt(n1);
            int num2=Integer.parseInt(n2);
            int num3=num1+num2;
            DisplayView.setText("Ans:  "+num3);
        }

    }
}

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </com.google.android.material.appbar.AppBarLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:onClick="Calculate"
        android:text="Calculate"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/num2" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_marginTop="68dp"
        android:text="App Login"
        android:textAlignment="center"
        android:textSize="40dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.478"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/num1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:ems="10"
        android:hint="Enter Number 1"
        android:inputType="number"
        android:textAlignment="center"
        android:textColorHint="#B34646"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <EditText
        android:id="@+id/num2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:ems="10"
        android:hint="Enter Number 2 "
        android:inputType="number"
        android:textAlignment="center"
        android:textColorHint="#9C3C3C"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.502"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/num1" />

    <TextView
        android:id="@+id/DIsplayView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:textSize="34sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

</androidx.constraintlayout.widget.ConstraintLayout>`

1 Answers1

0

The Calculate() method should be outside the onCreate() method.

Also num2= findViewById(R.id.num1); for num2 you are referencing num1 view.

Better Approach:

Instead of onClick xml attribute, you can you use the ViewOnClickListener. You can read more about it here.

package com.example.logintypeapp;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity2 extends AppCompatActivity {
    private Button button;
    private TextView textView;
    private TextView DisplayView;
    private EditText editText;

    private EditText num2;
    private EditText num1;
    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_2);
        button = findViewById(R.id.button);
        num1= findViewById(R.id.num1);
        num2= findViewById(R.id.num2);
        DisplayView = findViewById(R.id.DIsplayView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calculate();
            }
        });
    }

    public void Calculate() {
        String n1=num1.getText().toString();
        String n2=num2.getText().toString();
        int num1=Integer.parseInt(n1);
        int num2=Integer.parseInt(n2);
        int num3=num1+num2;
        DisplayView.setText("Ans:  "+num3);
    }
}