Android 未保存用户,SharedReferences

Android 未保存用户,SharedReferences,android,sharedpreferences,android-edittext,Android,Sharedpreferences,Android Edittext,您好,我有一个inlogscreen(inlogdialog.xml),其中包括2个EditText(用户名,passwd)和一个复选框(saveuser),用户可以通过该复选框决定是否保存用户名 在mainform(main.xml)上,我有一个用于以下3个值的列表: private class OnReadyListener implements MyCustomForm.ReadyListener { public void ready(String user, String p

您好,我有一个inlogscreen(inlogdialog.xml),其中包括2个EditText(用户名,passwd)和一个复选框(saveuser),用户可以通过该复选框决定是否保存用户名

在mainform(main.xml)上,我有一个用于以下3个值的列表:

private class OnReadyListener implements MyCustomForm.ReadyListener {

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

}
现在我首先想通过SharedReferences保存用户名,但是没有保存,有人能帮我吗

如果我使用system.out.println进行检查,用户名将出现在字符串username中

main.xml中的SharedReferences代码:

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();    
}
编辑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();    
}
@覆盖
受保护的void onPause(){

System.out.println(“用户:+username);最好不要对用户名使用空键。在SharedReferences中保存数据是基于保存键值对。您可以通过提供键来检索值。当前,用户名的键是空字符串

尝试以下方法:

    //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)); 
}
编辑:这是从SharedReferences检索的方式:

userPrefs.getString(DEF_USERNAME_KEY, DEF_USERNAME_VALUE)
在您的情况下,这将类似于:

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

然后
returnedUsername
保存存储在SharedPrefs中的值。

您的
用户名的密钥为空(请参阅:
public static final String USERNM=”“;
),这太糟糕了。您需要为每个值设置一个密钥


)

Hi Hovanesyan,第一个回答的thx,我现在给USERNM一个值:public static final String USERNM=“User”正如您所建议的,但它仍然没有被保存。仅供参考,用户名正在从另一个表单inlogdialog.xml传递到主表单main.xml中的OnReadyListener。如果我检查用户名,它就在那里,但当我提交时,我会得到值User?这是什么意思?这是我现在用于测试的目的。确定使用我的GetSharedRef编辑代码此外,我还在保存一些复选框的状态,即myBoxState。我没有为用户名添加代码,因为我首先要保存它,然后再检索它。它应该是什么样子的?代码中的情况看起来很正常。可能它们在其他地方弄错了。尝试记录用户名变量的值,看看它是否正确在那里,就在您将其保存到SharedPrefs之前。除此之外,您使用SharedPrefs的方式还可以。好的,谢谢确认,但这很奇怪。我按照您的建议检查了该值,请参阅我代码中的编辑2。嗯
String returnedUsername = e.getString(USERNM, "");