Android Java SharedReferences逻辑问题
Android JavaAndroid Java SharedReferences逻辑问题,java,android,Java,Android,Android JavaSharedReferenceslogic issue if(!isUserSignedIn()){ SignHimIn(); } 我有一个应用程序,它有一个登录和注销 我想,当用户第一次下载应用程序时,它是注销。然后,当他使用按钮登录时,会保存一个SharedReference值。现在,下次他打开应用程序时,它会自动让他登录。假设他注销然后关闭应用程序,那么现在当他打开应用程序时,它将注销他。这就是大多数应用程序的运行方式 我所做的,在第一次活动中,我添加了以下
SharedReferences
logic issue
if(!isUserSignedIn()){
SignHimIn();
}
我有一个应用程序,它有一个登录和注销
我想,当用户第一次下载应用程序时,它是注销。然后,当他使用按钮登录时,会保存一个SharedReference
值。现在,下次他打开应用程序时,它会自动让他登录。假设他注销然后关闭应用程序,那么现在当他打开应用程序时,它将注销他。这就是大多数应用程序的运行方式
我所做的,在第一次活动中,我添加了以下内容
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();
}
那不行 为什么在首次启动活动时将布尔值设置为false?您应该只依赖getBoolean的默认值(您将其定义为false)——这意味着如果您还没有在SignedIn字段中放入任何内容,它仍将返回false 解决方案: 在你的登录按钮里面
SharedPreferences mPrefs= getSharedPreferences("mPrefsName", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean("isSignedIn",true);
editor.commit();
当您的活动开始时(注意isSignedIn旁边的false-这是默认值)
和内部注销按钮(不在活动开始时)
为什么在首次启动活动时将布尔值设置为false?您应该只依赖getBoolean的默认值(您将其定义为false)——这意味着如果您还没有在SignedIn字段中放入任何内容,它仍将返回false 解决方案: 在你的登录按钮里面
SharedPreferences mPrefs= getSharedPreferences("mPrefsName", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean("isSignedIn",true);
editor.commit();
当您的活动开始时(注意isSignedIn旁边的false-这是默认值)
和内部注销按钮(不在活动开始时)
这不应该起作用,因为每次启动应用程序时,您都会将
SiggnedIn?
覆盖为false。
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", false);
editor.commit();
我建议使用另一个用于SharedReferences
的键来确定应用程序是否是第一次启动的
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();
}
然后在活动
启动中,检查用户是否已登录
if (SiggnedIn.getBoolean("SiggnedIn?", false)) {
SignHimIn();
}
Rest
登录
和注销
逻辑正常。我假设您在按钮中执行此操作。这不应该起作用,因为每次启动应用程序时,您都将signedin?
覆盖为false。
SharedPreferences SiggnedIn = getSharedPreferences("YesOrNo", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = SiggnedIn.edit();
editor.putBoolean("SiggnedIn?", false);
editor.commit();
我建议使用另一个用于SharedReferences
的键来确定应用程序是否是第一次启动的
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();
}
然后在活动
启动中,检查用户是否已登录
if (SiggnedIn.getBoolean("SiggnedIn?", false)) {
SignHimIn();
}
Rest登录
和注销
逻辑正常。我假设您在按钮中执行此操作。保持简单
检查状态
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();
}
保持简单
检查状态
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();
}
YesOrNo
和SiggnedIn?
不是很好的键(可能只是我的意见)。看看这个问题,看看答案,看看这是否能帮你解决YesOrNo
和SiggnedIn?
不是很好的键(可能只是我的意见)。看一看这个问题和答案,看看这是否能帮你解决这个问题。嗨,答案不错,但在“检查状态”和“简单逻辑”中,editor.commit()代码>没有意义。您也不需要定义两次isLoggedIn
。谢谢大家,这些都是复制过去的打字错误,回答很好,但处于“检查状态”和“简单逻辑”中,editor.commit()代码>没有意义。你也不需要定义两次isLoggedIn
。谢谢大家,这些都是过去的打字错误