繁体   English   中英

Android Java sharedPreferences逻辑问题

[英]Android Java sharedPreferences logic issue

Android Java sharedPreferences逻辑问题

我有一个已登录并注销的应用程序。

我想要,当用户首次下载该应用程序时,它已退出。 然后,当他使用按钮sharedPreference将保存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();
            }

那不行

这不应该起作用,因为每次启动该应用程序时,您都在覆盖SiggnedIn? 虚假。

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 inSign out逻辑可以。 我假设您是在“ Button单击”中执行此操作的。

为什么在首次启动活动时将布尔值设置为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-这是默认值)

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();

保持简单

检查状态

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM