3

特定の順序で実行する必要のある「検証」コードのブロックが2つありますが、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()メソッドは、ユーザーにメールアドレスを入力する必要があることを知らせるアラートダイアログボックスを作成し、[OK]をクリックすると、[設定]アクティビティを起動して、メールアドレスを入力できるようにします。

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()ダイアログボックスをスローしているので、理由がわかりません。

2番目の検証がWebサービスを呼び出し、最初の検証がPreferenceストアをチェックしていて、Preferenceストアにアクセスする前にWebサービスの呼び出しが完了しているためですか?

最初の検証とwarning()が2番目の検証とwarning2()の前に処理されるようにするにはどうすればよいですか?

4

1 に答える 1

2

それが最初にwarning2ダイアログを呼び出しているのですか、それとも最初に表示されているだけですか?ダイアログはメインアクティビティをブロックしないため、おそらくwarning最初に呼び出しますが、その直後にwarning2、最初のダイアログをカバーするを呼び出します。したがって、warning2が表示され、そのすぐ下に階層化されているため、却下されるまで警告は表示されません。

于 2012-09-11T13:05:52.020 に答える