Android Java sharedPreferences逻辑问题

时间:2014-06-03 20:00:08

标签: java android

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

这不起作用。

3 个答案:

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