所以我只是想保存一个字符串..但每次我重新运行应用程序时,我为保存的字符串得到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;
}
}
非常感谢!答案 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();