2014-03-02 37 views
-3

我用一組簡單的&獲取類,這樣我可以檢索整個應用的過程變量,但我需要存儲這個類以備後用,所以我想用共享偏好來存儲但我不知道如何正確實施。我試圖在setter方法中實現共享首選項,並且沒有錯誤,但是當我運行時會崩潰。安卓:共享偏好和getter和setter方法

下面是類

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.widget.EditText; 



public class Passcode extends Activity { 

    private String pin; 
    public static final String PREFS_PASS = "MyPrefsFile"; 
    EditText txtNewPin = (EditText)findViewById(R.id.txt_EnterNewPin); 
    SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0); 
    SharedPreferences.Editor editor = Pincode.edit(); 

    public String getPin() { 
     Pincode.getString(pin,"0000"); 
     return pin; 
    } 

    public void setPin(String pin) { 

     editor.putString(pin, txtNewPin.getText().toString()); 
     editor.commit(); 

    } 


} 
+0

所以很多東西丟失片斷中,我建議你應該多看一些關於Android和活動。與你合作應該重寫'onCreate()'在那裏加載你的佈局,在完成之後你可以使用'findViewById()'設置你的'EditText',查看共享首選項處理的答案。 – Robert

+0

林不知道我正確解釋這個但這並不意味着是一個活動我只作了重要的是能夠從另一個XML文件中的EditText帶給我只是希望能夠去object.setPin其他類ANS有值存儲在共享的喜好,並能夠通過去object.getPin – Eunan

+0

歐凱稱呼它,但你必須加載反正你的佈局,才能在佈局中訪問UI組件。但是你的佈局是在某個班加載的,對吧?你爲什麼不在那裏有你的getter和setter? – Robert

回答

1

使用了GET使用它之前的值,並在共享偏好設置變量。

/** 
* This method is used to set shared preferences 
* @param context Application context 
* @param key shared object key 
* @param value shared object value 
*/ 
public static void setPreferences(Context context, String key, String value) { 
    SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(context); 
    Editor prefsEditor = appSharedPrefs.edit(); 
    prefsEditor.putString(key, value); 
    prefsEditor.commit(); 
} 

/** 
* This method is used to get shared object 
* @param context Application context 
* @param key shared object key 
* @return return value, for default "" asign. 
*/ 
public static String getPreferences(Context context, String key) { 

    SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(context); 

    String json = appSharedPrefs.getString(key, ""); 
    if (TextUtils.isEmpty(json)) { 
     return null; 
    } 
    return json; 
} 

它是爲我工作。在此代碼

+0

由於這是多了還是少了什麼我落得這樣做,到目前爲止,它工作得很好 – Eunan

+0

所以,請接受這個作爲你的答案。 – Solution

0

哪裏是onCreate方法? 假設ü要在共享PREF操縱一個布爾值:

 SharedPreferences SharedPref_; 
     Editor _prefsEditor; 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
    // to get 
    SharedPref_ = this.getSharedPreferences("MainPref", MODE_WORLD_READABLE); 
      downloaded = SharedPref_.getBoolean("Downloaded", false) ; 

    // to set a shared pref : 
    _prefsEditor = SharedPref_.edit(); 
      downloaded = true; 
      _prefsEditor.putBoolean("Downloaded",true); 
      _prefsEditor.commit(); 


} 
0

我不相信你可以初始化的方法之外您的EditText,因爲佈局可能不會被設置。出於這個原因,我會把它放在方法裏面。這同樣適用於SharedPreferences。只要把它所有的方法:

private String pin; 
public static final String PREFS_PASS = "MyPrefsFile"; 

public String getPin() { 
    EditText txtNewPin = (EditText)findViewById(R.id.txt_EnterNewPin); 
    SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0); 
    Pincode.getString(pin,"0000"); 
    return pin; 
} 

public void setPin(String pin) { 
    SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0); 
    SharedPreferences.Editor editor = Pincode.edit(); 
    editor.putString(pin, txtNewPin.getText().toString()); 
    editor.commit(); 
} 

但是我也看到更多的一個問題:String pin永遠不會初始化。確保是有你在下面的方法Pincode.getString(pin, "0000");