2015-10-05 60 views
0

我在我的ActivityonCreate上有我的代碼。SharedPreferences /變量未按順序讀取

SharedPreferences globalPreferences = getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); 
boolean hasFinishedIntroduction = globalPreferences.getBoolean(PREF_FINISHED_INTRO), false); 

Log.d(TAG, "Has finished introduction: " + hasFinishedIntroduction); 

if(!hasFinishedIntroduction){ 
    startActivity(new Intent(this, IntroductionActivity.class)); 
    finish(); 
} 

boolean hasLoggedInUsingFacebook = globalPreferences.getBoolean(PREF_LOGGED_IN_FACEBOOK), false); 
boolean hasLoggedInUsingGoogle = globalPreferences.getBoolean(PREF_LOGGED_IN_GOOGLE), false); 

Log.d(TAG, "Has logged in using Facebook: " + hasLoggedInUsingFacebook); 
Log.d(TAG, "Has logged in using Google: " + hasLoggedInUsingGoogle); 

if(!hasLoggedInUsingFacebook && !hasLoggedInUsingGoogle){ 
    startActivity(new Intent(this, SocialLoginActivity.class)); 
    finish(); 
} 

我的問題是,每次我跑我的應用程序時(乾淨安裝),我的應用程序開始我的SocialLoginActivity是應該被第二檢查。我的第一個檢查被忽略(hasFinishedIntroduction)。 當然,我試着用Log消息調試它,但所有工作正常(至少值)。

10-06 03:15:09.907 12969-12969/com.sample.foo D/Bar: Has finished introduction: false 
10-06 03:15:09.937 12969-12969/com.sample.foo D/Bar: Has logged in using Facebook: false 
10-06 03:15:09.937 12969-12969/com.sample.foo D/Bar: Has logged in using Google: false 

顯然,應用程序可以讀取hasFinishedIntroductionfalse但它忽略了它,並拒絕執行什麼是我的第一if語句中。
令人驚訝的是,在我登錄我的應用程序後,用戶將被帶回Activity,然後我的hasFinishedIntroduction的值將被執行並將開始Activity我指示它開始。

謝謝你的幫助。

編輯
我忘了,這裏要注意的是,我也把一些Log.d()在我IntroductionActivitySocialLoginActivityonCreate但它確實表明,它並沒有真正調用IntroductionActivity可言。

回答

2

我想你需要從hasFinishedIntroduction塊中的方法返回,因爲塊後面的代碼正在執行,並且SociaLoginActivityIntroductionActivity之上被啓動。

試試這個:

if(!hasFinishedIntroduction){ 
    startActivity(new Intent(this, IntroductionActivity.class)); 
    finish(); 
    return; 
} 
+0

感謝您的答覆。不幸的是,它並沒有爲我工作。我忘了注意,我還在其他'Activities'上放了'Log.d()'來判斷它們是否被調用,但是它確實直接到了我的'SocialLoginActivity'。 – CodeHarmonics

+0

你可以在'hasFinishedIntroduction'的if代碼塊中放入日誌,看它是否得到執行。你也可以試着按回來,看到'SociaLoginActivity',看看'IntroductionActivity'是否在後臺 – pgiitu

+0

哦,我以前沒有嘗試過。它看起來像在'if'塊(它打印我的調試信息),但從來沒有啓動我的'IntroductionActivity',並且從'if'塊去掉,並且執行另一個'if'。讓我感到困惑的是,在進入我的SocialLoginActivity後,它執行''startActivity()'到'IntroductionActivity'並且第二次返回到這個'Activity'。 – CodeHarmonics