Shan Biswas
Shan Biswas

Reputation: 429

Variable accessed from inner class, need to declare final

I am new in android and preparing a addition project. I want get value1 and value2 and calculate the result. But I am getting error that Variable accessed from inner class, need to declare final. And if I declare the variable as final then I got another error message that cannot assign a value to final variable.

package com.example.borntoflirt.design1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AdditionActivity extends AppCompatActivity {

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

    final EditText valueOne;
    final EditText valueTwo;
    final TextView result;
    Button btnAdd;

    final double num1;
    double num2;
    double sum;

    valueOne = (EditText) findViewById(R.id.valueOne);
    valueTwo = (EditText) findViewById(R.id.valueTwo);
    result = (TextView) findViewById(R.id.result);
    btnAdd = (Button) findViewById(R.id.buttonAdd);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            num1 = Double.parseDouble(valueOne.getText().toString());
            // result.setText(Double.toString(Double.parseDouble(valueOne.getText().toString()) + Double.parseDouble(valueTwo.getText().toString())));

        }
    });
}
}

Upvotes: 0

Views: 246

Answers (2)

Milos Lulic
Milos Lulic

Reputation: 627

Your code should look like this:

package com.example.borntoflirt.design1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AdditionActivity extends AppCompatActivity {

    private EditText valueOne;
    private EditText valueTwo;
    private TextView result;
    private Button btnAdd;

    private double num1;
    private double num2;
    private double sum;

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

    valueOne = (EditText) findViewById(R.id.valueOne);
    valueTwo = (EditText) findViewById(R.id.valueTwo);
    result = (TextView) findViewById(R.id.result);
    btnAdd = (Button) findViewById(R.id.buttonAdd);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            num1 = Double.parseDouble(valueOne.getText().toString());
            // result.setText(Double.toString(Double.parseDouble(valueOne.getText().toString()) + Double.parseDouble(valueTwo.getText().toString())));

        }
    });
  }
}

in case valueOne is empty, you should add one part to check if EditText have some value, otherwise you can get another error:

public void onClick(View v) {
        if(!valueOne.getText().toString().equals("")) {
            num1 = Double.parseDouble(valueOne.getText().toString());
            // result.setText(Double.toString(Double.parseDouble(valueOne.getText().toString()) + Double.parseDouble(valueTwo.getText().toString())));
        } else {
              Toast.makeText(AdditionActivity.this, "Please add some nunber to continue", Toast.LENGTH_LONG).show();
        }

}

Upvotes: 1

kanudo
kanudo

Reputation: 2219

Just simply declare the variable in the root of the class outside the function.

import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AdditionActivity extends AppCompatActivity {

    // Just declare the varibles here

    double num1;
    double num2;
    double sum;

    EditText valueOne;
    EditText valueTwo;
    TextView result;
    Button btnAdd;

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

        valueOne = (EditText) findViewById(R.id.valueOne);
        valueTwo = (EditText) findViewById(R.id.valueTwo);
        result = (TextView) findViewById(R.id.result);
        btnAdd = (Button) findViewById(R.id.buttonAdd);

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                num1 = Double.parseDouble(valueOne.getText().toString());
                // result.setText(Double.toString(Double.parseDouble(valueOne.getText().toString()) + Double.parseDouble(valueTwo.getText().toString())));

            }
        });
    }
}

Upvotes: 0

Related Questions