我有两块“验证”代码需要按特定顺序执行,但是onPostCreate()事件中的代码在onCreate()事件中的代码之前触发,我怀疑它可能有某些东西与偏好商店有关。
一些伪代码可能有助于解释:
onCreate()
{
prefs = PreferenceManager.getDefaultSharedPreferences(this);
email = prefs.getString("email", "noemail@noemail.com").toString();
if (email.equals("noemail@noemail.com"))
{
//user has not supplied email address, show alert dialog
warning();
}
}
warning()方法只是构建一个警告对话框,让用户知道他们需要输入一个电子邮件地址,当他们单击“确定”时,它会启动“首选项”活动,以便他们可以提供电子邮件地址。
onPostCreate()
{
carrier = manager.getNetworkOperatorName();
if(carrier.equals("SPRINT"))
{
//call web service to validate carrier compatibility
//if web service returns "FALSE" call warning2();
}
}
warning2()方法与warning()的作用相同 - 它构建一个警告对话框,让用户知道他们的载体不兼容。
即使在onCreate()中调用了warning(),并且在onPostCreate()中调用了warning2(),当前应用程序也会在warning()对话框之前抛出warning2()对话框,而我不会理解为什么。
是否因为第二次验证调用了一个Web服务,并且第一次验证是检查Preference存储,并且在访问Preference存储之前,Web服务调用是以某种方式完成的?
如何在第二次验证和warning2()之前强制执行第一次验证和警告()?
答案 0 :(得分:1)
你确定它首先调用warning2对话框,还是你刚刚看到它?对话框不会阻止主要活动,因此它可能首先调用warning
,但在此之后,它会调用warning2
,这将覆盖第一个对话框。所以你会看到warning2,在它被解除之前不会看到警告,因为它直接在它下面分层。