Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java SharedReferences逻辑问题_Java_Android - Fatal编程技术网

Android Java SharedReferences逻辑问题

Android Java SharedReferences逻辑问题,java,android,Java,Android,Android JavaSharedReferenceslogic issue if(!isUserSignedIn()){ SignHimIn(); } 我有一个应用程序,它有一个登录和注销 我想,当用户第一次下载应用程序时,它是注销。然后,当他使用按钮登录时,会保存一个SharedReference值。现在,下次他打开应用程序时,它会自动让他登录。假设他注销然后关闭应用程序,那么现在当他打开应用程序时,它将注销他。这就是大多数应用程序的运行方式 我所做的,在第一次活动中,我添加了以下

Android Java
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
。谢谢大家,这些都是过去的打字错误