2014-11-04 51 views
0

嗨我想讓我的應用程序記住用戶登錄後的用戶登錄詳細信息,直到用戶按下「註銷」按鈕。我現在用的這種風格使用SharedPreferences保存用戶詳細信息

private CheckBox mCheckSavePassword; 
    mCheckSavePassword.setChecked(preferences.getBoolean("prefSavePassword", false)); 
    SharedPreferences.Editor preferencesEditor = preferences.edit(); 
     preferencesEditor.putString("prefUserName", username); 
      if(mCheckSavePassword.isChecked()) { 
        preferencesEditor.putString("prefPassword", password); 
      } 
      preferencesEditor.putBoolean("prefSavePassword", mCheckSavePassword.isChecked()); 
      preferencesEditor.commit(); 

但它不工作

+0

你可以請你的代碼如何初始化偏好? – 2014-11-04 09:40:41

+0

是的只需一分鐘 – Andrew 2014-11-04 09:47:39

回答

0

看到下面的用法編寫

SharedPreferences sharedpreferences = getSharedPreferences("pref_file_name", Context.MODE_PRIVATE); 
    Editor editor = sharedpreferences.edit(); 
    editor.putString("prefUserName", username); 
    if (mCheckSavePassword.isChecked()) 
     editor.putString("prefPassword", password); 
    editor.putBoolean("prefSavePassword", mCheckSavePassword.isChecked()); 
    editor.commit(); 

,你必須分離出你讀邏輯(上面只是寫它優先) 在屏幕初始化期間,只讀取首選項並初始化複選框和密碼框的狀態

+0

由於您對編寫共享首選項的結果不感興趣,因此您可能需要使用apply()而不是commit()。 – Robert 2014-11-04 09:49:44

+0

只是改變適用? – Andrew 2014-11-04 09:52:19

+0

both will work .. commit returns the result(如果新值成功寫入永久性存儲,則返回true),但通常沒有失敗原因 – Aun 2014-11-04 09:57:22

0

試試這種方式,希望這會幫助你解決你的問題。

如何設置:

SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.putBoolean("prefUserName", username); 
editor.putBoolean("prefPassword", mCheckSavePassword.isChecked()?password:""); 
editor.commit(); 

如何獲得:

SharedPreferences sharedPreferences = getSharedPreferences("yourSharePreferenceName", MODE_PRIVATE); 
mCheckSavePassword.setChecked(sharedPreferences.getString("prefPassword","").trim().length()>0?true:false); 
+0

我必須得到它嗎? – Andrew 2014-11-04 09:51:21

0

這是你如何保存用戶的詳細信息,當用戶登錄成功。

此外,如果您想在共享首選項中爲用戶下次登錄屏幕時製作用戶名,此代碼將對您有所幫助。

我還包括代碼來填充EditText中的共享prefernces值,如果方向更改。

//Form Variables 
EditText userName; 
CheckBox chkRememberMe; 

//SharedPrefernces Variables to save userName and password of User 
SharedPreferences loginPreferences; 
private static final String SPF_NAME = "vidslogin"; 
private static final String USERNAME = "username"; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    //Getting Values from edit text fields 
    userName = (EditText) findViewById(R.id.login_et_username); 

    //Check box to remember UN and PSW 
    chkRememberMe = (CheckBox) findViewById(R.id.cb_rememberMe); 

    //Read previously saved userName from sharedPreferences and populate in the editText 
    loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE); 
    userName.setText(loginPreferences.getString(USERNAME, "")); 
} 

//Saving Activity State 
@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     //Read previously saved userName & password from sharedPreferences 
     loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE); 
     userName.setText(loginPreferences.getString(USERNAME, "")); 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     //Read previously saved userName & password from sharedPreferences 
     loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE); 
     userName.setText(loginPreferences.getString(USERNAME, "")); 

    } 
} 

// login function 

public void login(){ 

//Check if he is authenticated 
// if Authenticated and if the user checks "REMEMBER ME"-- Checkbox, save his details 
//Saving userName into SharedPreferences to read for next time 

    String strUserName = userName.getText().toString().trim(); 
    if (chkRememberMe.isChecked()){ 
    loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE); 
    loginPreferences.edit().putString(USERNAME, strUserName).commit(); 
    } 
} 

希望能得到。

+0

嗨,謝謝,我會嘗試 – Andrew 2014-11-04 12:53:40