2017-11-22 9 views
0

私はアンドロイドに新規登録してaddition projectを用意しています。私はvalue1value2を得て、結果を計算します。しかし、私はVariable accessed from inner class, need to declare finalというエラーが発生しています。変数をfinalと宣言すると、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()))); 

     } 
    }); 
} 
} 
+0

グローバルnum1変数 –

+0

匿名の内部クラスから最終変数にアクセスすることはできません。 – ADM

答えて

1

あなたのコードは次のようになります。ケースvalueOneで

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

     } 
    }); 
    } 
} 

が空である、あなたはそれ以外の場合は、あなたが別のエラーを取得することができ、のEditTextは、いくつかの値を持っているかどうかを確認するために一部を追加する必要があります

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

} 
+1

働いて、ありがとう –

+0

@ShanBiswas私はこの仕事がうれしいです –

+0

私は空の値をチェックするためにあなたの編集したコードを加えました。しかし、私が追加ボタンをクリックすると、テキストファイルを埋めることなく、残念なことに私のアプリは停止します。 –

0

変数を関数外のクラスのルートに宣言するだけです。

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

      } 
     }); 
    } 
} 
関連する問題