2017-02-25 418 views
-1

我是刚刚接触android开发人员,我正在尝试学习SharedPreferences。 如何使用按钮操作X的值,然后再次使用按钮将其保存到SharedPreferences。错误:无法为最终变量分配值

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

"Error:(42, 17) error: cannot assign a value to final variable 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); 

      } 

     }); 


    } 



} 
+1

请看看_final_这意味着什么:HTTPS:/ /en.wikipedia.org/wiki/Final_(Java)#Final_variables –

+0

全局声明'int x' .. private int x; – rafsanahmad007

回答

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为不同的变量类型及其使用

0

声明x为您Actvity成员领域,它会在你的内部类可以访问