2011-05-02 34 views
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)); 
    } 
} 

有我的個人事業的一些電話,但我認爲該代碼是在你需要做的相當清楚:

回答

16

我通過擴展底座EditTextPreference和加密/解密的密碼有這樣做。

+0

感謝您的想法,我做了我自己的擴展類,但我如何實現它到我的喜好屏幕?使用XML文件中的條目?我嘗試過這種方式,但沒有成功。 – EvanBlack 2011-05-02 15:54:55

+3

它必須是完全合格的名稱,例如 dmon 2011-05-02 16:03:07

+0

謝謝,這很像魔術。 :) – EvanBlack 2011-05-02 16:09:28