处理保存在Android中的偏好的价值?

我需要encryption我的密码,然后将其保存到本地android数据库。 一切工作正常,没有encryption,我有preferences.xml等等。 如何更改首选项的值(例如,密码) 调用函数? 这是我的代码:

public class Preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); // Get the custom preference Preference customPref = (Preference) findPreference("pass"); customPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){ @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String crypto = SimpleCrypto.encrypt("MYSECRETKEY", newValue.toString()); // encrypt // Here is where I'm wrong, I guess. SharedPreferences settings = getSharedPreferences("preferences", MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString("pass", crypto); editor.commit(); }); } } 

PS:像这样,当我更改密码时,它存储密码而不encryption。

Solutions Collecting From Web of "处理保存在Android中的偏好的价值?"

我通过扩展基本的EditTextPreference并在那里encryption/解密密码来做到这一点:

 public class EncryptedEditTextPreference extends EditTextPreference { public EncryptedEditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public EncryptedEditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); } public EncryptedEditTextPreference(Context context) { super(context); } @Override public String getText() { String value = super.getText(); return SecurityUtils.decrypt(value); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { super.setText(restoreValue ? getPersistedString(null) : (String) defaultValue); } @Override public void setText(String text) { if (Utils.isStringBlank(text)) { super.setText(null); return; } super.setText(SecurityUtils.encrypt(text)); } } 

有一些电话给我的个人实用程序,但我认为你需要做的代码非常清楚。