簡體   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