Android Java sharedPreferences
逻辑问题
我有一个已登录并注销的应用。
我想,当用户首次下载应用时,它会退出。然后,当他使用按钮登录时,sharedPreference
值会保存。现在,下次他打开应用程序时,它会自动签下他。让我说他退出然后关闭应用程序,所以现在当他打开它时,它会签下他。这就像大多数应用程序一样。
我做了什么,在我添加此活动的第一个
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", false);
editor.commit();
然后当用户点击按钮退出
时 SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", false);
editor.commit();
如果他点击它来登录
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", true);
editor.commit();
最后,如果我有一个方法每秒更新一切。
所以在其中,我添加了
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
boolean myIntValue = SiggnedIn.getBoolean("SiggnedIn?", false);
if(myIntValue){
SignHimIn();
}
这不起作用。
答案 0 :(得分:2)
这不应该有用,因为每次启动应用时,您都会将SiggnedIn?
覆盖为false。
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", false);
editor.commit();
我建议使用SharedPreferences
的其他密钥来确定该应用是否首次启动。
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
if (SiggnedIn.getBoolean("APP_LAUNCHED_FIRST_TIME", true)) {
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("APP_LAUNCHED_FIRST_TIME", false);
editor.commit();
//For the first time, user should be signed out
editor.putBoolean("SiggnedIn?", false);
editor.commit();
}
然后在Activity
启动时,检查用户是否已登录。
if (SiggnedIn.getBoolean("SiggnedIn?", false)) {
SignHimIn();
}
休息Sign in
和Sign out
逻辑正常。我假设您在Button
点击中执行此操作。
答案 1 :(得分:1)
为什么在首次启动活动时将布尔值设置为false?你应该只依赖于getBoolean的默认值(你定义为false) - 这意味着如果你还没有在SignedIn字段中放置任何东西,它仍将返回false。
解决方案:
在登录按钮内
SharedPreferences mPrefs= getSharedPreferences("mPrefsName", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean("isSignedIn",true);
editor.commit();
当你的活动开始时(注意isSignedIn旁边的错误 - 这是默认值)
SharedPreferences mPrefs= getSharedPreferences("mPrefsName", Activity.MODE_PRIVATE);
if(mPrefs.getBoolean("isSignedIn",false))
DoStuff();
在注销按钮内(不在活动开始时)
SharedPreferences mPrefs= getSharedPreferences("mPrefsName", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean("isSignedIn",false);
editor.commit();
答案 2 :(得分:1)
保持简单
检查状态
SharedPreferences pref = getSharedPreferences("userSession", Activity.MODE_PRIVATE);
boolean isLoggedIn = pref.getBoolean("isLoggedIn", false);
登录
SharedPreferences pref = getSharedPreferences("userSession", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("isLoggedIn", true);
editor.commit();
退出
SharedPreferences pref = getSharedPreferences("userSession", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("isLoggedIn", false);
editor.commit();
简单逻辑
protected boolean isUserSignedIn(){
boolean isLoggedIn = false;
SharedPreferences pref = getSharedPreferences("userSession", Activity.MODE_PRIVATE);
isLoggedIn = pref.getBoolean("isLoggedIn", false);//false is just default
return isLoggedIn;
}
<强>用法强>
if(!isUserSignedIn()){
SignHimIn();
}