[英]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 in
並Sign 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.