Пользователь не сохраняется, SharedPreferences - PullRequest
1 голос
/ 13 ноября 2011

Привет, у меня есть inlogscreen (inlogdialog.xml), который включает 2 EditText (username, passwd), и у меня есть CheckBox (saveuser), с помощью которого пользователь может выбирать погоду, чтобы сохранить имя пользователя или нет.

В mainform (main.xml) у меня есть список для этих 3 значений:

private class OnReadyListener implements MyCustomForm.ReadyListener {

    public void ready(String user, String pass, boolean save) {
        username = user;
        password = pass;
    }

}

Теперь я сначала хочу сохранить имя пользователя через SharedPreferences, но оно не сохраняется, может кто-нибудь мне помочь, пожалуйста?

Если я проверяю с помощью system.out.println, имя пользователя присутствует в String username.

SharedPreferenes код в main.xml:

public static final String USERNM = ""; 
private SharedPreferences mPrefs; 
.......

@Override     
protected void onPause() {  
    Editor e = mPrefs.edit();   
    e.putString(USERNM, username); <----
    e.commit();     
    Toast.makeText(this, "Items saved.", Toast.LENGTH_SHORT).show();         
    super.onPause();    
}

Edit:

public static final String PREFS_NAME = "SharedPrefsDemoPreferences";  
public static final String PREF_BOOL = "Bool"; 
public static final String USERNM = "User"; 

private SharedPreferences mPrefs;
....
@Override 
protected void onResume() { 
    mPrefs = getSharedPreferences(PREFS_NAME, 0); 
    if(mPrefs!=null) 
        myBoxState=mPrefs.getBoolean(PREF_BOOL, false); 
    super.onResume(); 
}

Редактировать 2:

@Override     
protected void onPause() { 
    System.out.println("user: " + username); <---- value username is there
    Editor e = mPrefs.edit();   
    //e.putBoolean(PREF_BOOL, nieuwbel.isChecked()); 
    e.putString(USERNM, username);
    e.commit(); 
    Toast.makeText(this, "Instelling beltegoed opgeslagen.", Toast.LENGTH_SHORT).show();         
    super.onPause();    
}

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Ваш ключ для username пуст (см .: public static final String USERNM = "";), это очень плохо.Вам нужен ключ для каждого значения.

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#putString(java.lang.String,%20java.lang.String)

1 голос
/ 13 ноября 2011

Лучше не использовать пустой ключ для имени пользователя.Сохранение данных в SharedPreferences основано на сохранении пары ключ-значение.Вы получаете значение, предоставляя ключ.В настоящее время ключом вашего имени пользователя является пустая строка.

Попробуйте что-то вроде:

    //initialize some default values and keys for the SharedPreferences
private static final String DEF_USERNAME_KEY = "prefsUsername";
private static final String DEF_USERNAME_VALUE = "def_username_value";

private static final String DEF_PASSWORD_KEY = "prefsPassword";
private static final String DEF_PASSWORD_VALUE = "def_pass_value";

private void saveUserData(String username, String password) {

    SharedPreferences.Editor userPrefsEditor = userPrefs.edit();

    userPrefsEditor.putString(DEF_USERNAME_KEY, username); 
    userPrefsEditor.putString(DEF_PASSWORD_KEY, password);

    userPrefsEditor.commit();

            //check if data is saved
    Log.d(TAG, "Getting from SharedPreferences " + DEF_USERNAME_KEY + " " + 
            userPrefs.getString(DEF_USERNAME_KEY, DEF_USERNAME_VALUE)); 
    Log.d(TAG, "Getting from SharedPreferences " + DEF_PASSWORD_KEY + " " + 
            userPrefs.getString(DEF_PASSWORD_KEY, DEF_PASSWORD_VALUE)); 
}

Редактировать: это то, как вы получаете из SharedPreferences:

userPrefs.getString(DEF_USERNAME_KEY, DEF_USERNAME_VALUE)

ВВ таком случае это будет выглядеть так:

String returnedUsername = e.getString(USERNM, "");

, чем returnedUsername содержит значение, которое вы сохранили в SharedPrefs.

...