【问题标题】:User not being saved, SharedPreferences用户未保存,SharedPreferences
【发布时间】:2011-12-27 23:39:52
【问题描述】:

您好,我有一个 inlogscreen (inlogdialog.xml),其中包括 2 个 EditText(用户名、密码)和一个 CheckBox(保存用户),用户可以使用它来决定是否保存用户名。

在主窗体 (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,用户名存在于字符串用户名中。

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();    
}

【问题讨论】:

    标签: android sharedpreferences android-edittext


    【解决方案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 中的值。

    【讨论】:

    • 您好 hovanessyan,首先感谢您的回答,我现在给 USERNM 一个值:如您所建议的那样, public static final String USERNM = "User" 但它仍然没有被保存。仅供参考,用户名正在从另一个表单 inlogdialog.xml 传递到主表单 main.xml 中的 OnReadyListener。如果我检查用户名,它就在那里,但是当我提交时,我得到值 User?
    • 你是什么意思?这就是我现在用于测试目的的东西。
    • 好的,用我的 getsharedpreferences 编辑了代码,我也在努力保存一些复选框的状态,那就是 myBoxState。我没有为用户名输入代码,因为我首先想保存它然后检索它。那么它应该是什么样子呢?
    • 在您的代码中看起来不错。可能他们在其他地方搞砸了。在将其保存到 SharedPrefs 之前,尝试记录用户名变量的值并查看它是否存在。除此之外,您使用 SharedPrefs 的方式还可以。
    • 好的,谢谢您的确认,但这很奇怪。我按照您的建议检查了值,请参阅我的代码中的编辑 2。嗯
    【解决方案2】:

    username 的密钥是空的(请参阅:public static final String USERNM = "";),这太糟糕了。每个值都需要一个键。

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

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2015-01-03
      • 2015-12-11
      • 2017-10-15
      相关资源
      最近更新 更多