您好我有一个inlogscreen(inlogdialog.xml),其中包含2个EditText(用户名,密码),我有一个CheckBox(saveuser),用户可以通过它来决定天气是否保存用户名。
在mainform(main.xml)上,我有一个列出这三个值的列表:
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中。
main.xml中的SharedPreferenes代码:
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();
}
编辑:
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();
}
答案 0 :(得分:2)
username
的密钥为空(请参阅:public static final String USERNM = "";
),这太糟糕了。每个值都需要一个键。
答案 1 :(得分:1)
最好不要使用空密钥作为用户名。在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中的值。