Android不保存sharedPrefs

时间:2016-01-09 14:54:49

标签: android

所以我只是想保存一个字符串..但每次我重新运行应用程序时,我为保存的字符串得到null:/我100%确定我调用了save方法,当我保存它时,字符串不为空。

public class CFUser {

private final static String ID_KEY="myUserID";
private static String userID;

public static String getUserID(Context context) {
    if(userID==null) {
        SharedPreferences prefs= context.getApplicationContext().getSharedPreferences(ID_KEY, 0);
        userID=prefs.getString(ID_KEY, null);
        }

    return userID;
}
public static void setUserID(String id, Context context) {
    userID=id;
    Log.d("saving", id);
    SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0);
    prefs.edit().putString(ID_KEY, userID);
    prefs.edit().apply();
}
public static boolean isLoggedIn(Context context) {
    return getUserID(context)!=null;
}

}

非常感谢!

2 个答案:

答案 0 :(得分:2)

在此代码中,您将创建两个不同的SharedPreferences.Editor对象:

SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0);
prefs.edit().putString(ID_KEY, userID);
prefs.edit().apply();

这意味着您将字符串放在Editor1中,但是提交Editor2的(不存在的)更改。
你需要这样做:

SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0);
SharedPreferenced.Editor edit = prefs.edit();
edit.putString(ID_KEY, userID);
edit.apply();

答案 1 :(得分:0)

目前,整个SharedPreferences文件的名称为myUserID,因为您正在检索SharedPreferences。而是使用以下。这不会导致问题,但我假设您不希望SharedPreferences文件作为您的ID密钥......

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

然后,当您写入首选项时,请确保使用相同的Editor

Editor editor = preferences.edit();
editor.putString(ID_KEY,userID);
editor.apply();