2017-02-25 346 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成員領域,它會在你的內部類可以訪問