错误:无法为最终变量分配值

时间:2017-02-25 11:53:23

标签: java android sharedpreferences anonymous-inner-class

我是Android开发的新手,我正在尝试学习SharedPreferences。 如何使用按钮操纵X的值,然后使用按钮再次将其保存到SharedPreferences。

我必须在OnCreate之后声明SharedPreferences,但是如果我之后声明X. OnCreate我必须将它设置为Final所以我可以在我的onClickListener中使用它,因为它是内部类,但是如果我这样做,那么我会得到一个编译器错误:

  

“错误:(42,17)错误:无法为最终变量x”

分配值
public class MainActivity extends AppCompatActivity {





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

        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
        final Editor editor = pref.edit();


         int x = pref.getInt("Value", 0);


        final TextView txt = (TextView) findViewById(R.id.textView);
        final Button ButtonAdd = (Button) findViewById(R.id.buttonPlus);
        final Button ButtonMinus = (Button) findViewById(R.id.buttonMinus);
        final Button ButtonCommit = (Button) findViewById(R.id.buttonCommit);
        final EditText EditText = (EditText) findViewById(R.id.editText);

        txt.setText(Integer.toString(x));

        ButtonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                x = x + 1;
                EditText.setText(Integer.toString(x));

            }

        });

        ButtonMinus.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {

                if(x != 0){
                    x=x-1;}

                EditText.setText(Integer.toString(x));

            }

        });


        ButtonCommit.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {

                txt.setText(Integer.toString(x));
                editor.putInt("Value", x);

            }

        });


    }



}

2 个答案:

答案 0 :(得分:1)

public class MainActivity extends AppCompatActivity {

  private int x;   //declare here

现在你的onCreate()

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

        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
        final Editor editor = pref.edit();


         x = pref.getInt("Value", 0);  //assign values to global variable
         //rest of the code
    }

有关不同类型的变量及其用法,请参阅this

答案 1 :(得分:0)

x声明为Actvity的成员字段,并且可以在您的内部类中访问