2014-11-04 95 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