8
我需要在將密碼保存到本地android數據庫之前加密密碼。一切工作正常,沒有加密,我有preferences.xml等等。如何在之後調用函數我更改了首選項的值(例如,密碼)?這是我的代碼:在保存到Android之前處理首選項的值?
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();
});
}
}
P.S:就像這樣,當我更改密碼時,它存儲密碼而不加密。
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));
}
}
有我的個人事業的一些電話,但我認爲該代碼是在你需要做的相當清楚:
感謝您的想法,我做了我自己的擴展類,但我如何實現它到我的喜好屏幕?使用XML文件中的 條目?我嘗試過這種方式,但沒有成功。 –
EvanBlack
2011-05-02 15:54:55
它必須是完全合格的名稱,例如 –
dmon
2011-05-02 16:03:07
謝謝,這很像魔術。 :) – EvanBlack 2011-05-02 16:09:28