简体   繁体   中英

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())));

        }
    });
}
}

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();
        }

}

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())));

            }
        });
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM