2015-10-05 50 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