2013-12-20 36 views
1

我有一個應用程序,我試圖在用戶登錄時保存用戶名和密碼。當用戶啓動應用程序時,它應該讀取用戶名和密碼並登錄。問題是,它總是讀取密碼兩次 - 一次是密碼(這是正確的),一次是用戶名。所以它會嘗試使用密碼作爲用戶名和密碼登錄。SharedPreferences讀取相同的值

閱讀:

sharedPref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 

String userName = sharedPref.getString(getString(
    R.string.de_letorat_TicTacToe_PREF_NAME), null); 
if(userName != null) { 
    String password = sharedPref.getString(getString(
     R.string.de_letorat_TicTacToe_PREF_PASSWORD), null); 
    Log.d("TicTacToe", "Read. Username: " + userName + "; Password: " + password); 
    pw.println("$login" + userName + "/" + password); 
    pw.flush(); 
    Log.d("TicTacToe", "Sent. Username: " + userName + "; Password: " + password); 
} 

保存:

Editor edit = sharedPref.edit(); 

EditText nameField = (EditText) findViewById(R.id.login_fragment_username); 
EditText passwordField = (EditText) findViewById(R.id.login_fragment_password); 

edit.putString(getString(R.string.de_letorat_TicTacToe_PREF_NAME), 
    nameField.getText().toString()); 
edit.putString(getString(R.string.de_letorat_TicTacToe_PREF_PASSWORD), 
    passwordField.getText().toString()); 
edit.commit(); 

Log.d("TicTacToe", "Wrote. Username: " + nameField.getText().toString() + 
    "; Password: " + passwordField.getText().toString()); 

的結果是:

Wrote. Username: [username]; Password: [password] 
Read. Username: [password]; Password: [password] 
Sent. Username: [password]; Password: [password] 
+1

初始化你保證'de_letorat_TicTacToe_PREF_NAME'和'de_letorat_TicTacToe_PREF_PASSWORD'有不同的價值觀。嘗試記錄這些 –

回答

1

檢查您的preferences.xml或您的strings.xml重複鍵。

看起來你的首選鍵是「密碼」。

0

每個字符串鍵需要用不同的值

String pref_name_key = "someName"; 
String pref_pswrd_key = "somePasword"; 
editor = sharedPrefs.edit(); 
editor.putString(pref_name_key, name); 
editor.putString(pref_pswrd_key, pswrd); 
editor.apply(); 
相關問題