3

我有两个“验证”代码块,需要按特定顺序执行,但是 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() 方法只是构建一个警告对话框,让用户知道他们需要输入电子邮件地址,当他们单击“确定”时,它会启动 Preferences 活动,以便他们可以提供电子邮件地址。

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 存储,并且 Web 服务调用在可以访问 Preference 存储之前以某种方式完成?

如何强制在第二次验证和warning2()之前处理第一次验证和警告()?

4

1 回答 1

2

你确定它是先调用warning2对话框,还是你只是先看到它?对话框不会阻止主要活动,因此它可能warning首先调用,但之后立即调用warning2,这将覆盖第一个对话框。所以你会看到warning2,直到它被解除才看到警告,因为它直接在它下面分层。

于 2012-09-11T13:05:52.020 回答