Dialog.ask()如何再次调用相同的方法

时间:2014-02-13 05:04:34

标签: blackberry blackberry-simulator

我想检查网络连接是否可用。如果它不可用,那么我显示一个对话框,然后单击对话框中的确定按钮,然后我再次需要检查网络连接等等。在这里我一次又一次地调用相同的方法。问题是在对话框中单击ok按钮调用相同的方法,但对话框没有关闭。

如果我们一次又一次地调用相同的方法,任何人都知道如何关闭对话框。

例如

private void checkConnection()
{
      if (!networkAvailable())
     {

         int reply = Dialog.ask(Dialog.OK,"Network not available");
         if (reply == Dialog.OK)
          {
              checkConnection();
           }

}

由于 Mindus

2 个答案:

答案 0 :(得分:0)

以上是上面的一个实现,它是在循环而不是递归中处理的,这样可以更容易地管理结束条件:

private void checkConnection() {
  if (!networkAvailable()) {
    boolean networkOK = networkAvailable();
    int reply = Dialog.ask(Dialog.D_OK,"Network not available");
    while (reply == Dialog.OK && !networkOK) {
      networkOK= networkAvailable();
      if ( !networkOK) {
        reply = Dialog.ask(Dialog.D_OK,"Network not available");
      }
    } // end of while loop
  }
} // end of method

此代码可以进一步优化,但如图所示,以明显的方式演示所需的步骤。

如果你也愿意,你也可以限制循环的次数。

但是我有几个保留意见。

从技术角度来看,我不知道networkAvailable()的方法是什么。它可能是阻塞的,在这种情况下我们需要重新编写代码以使其脱离事件线程。

但我想我的主要担心是我不确定这是一个很好的用户体验。我认为您需要从用户的角度来看待这一点,并考虑如果没有可用的网络,他们会想要发生什么。我不相信给他们一个对话,这是最佳的解决方案。

答案 1 :(得分:-1)

通过查看您的方法,您可以查看互联网连接的循环过程,只有在进行互联网连接时才会结束。

关闭此对话框的另一种方法是设置计数器变量。

试试这段代码:

public static final int mCounter = 1;

private void checkConnection() {
    if (!networkAvailable()) {
        if (mCounter != 5) {
            int reply = Dialog.ask(Dialog.OK, "Network not available");
            if (reply == Dialog.OK) {
                mCounter++;
                checkConnection();
            }
    } else {
    mCounter = 1;
            new Thread(new Runnable() {
                public void run() {
                    Thread.sleep(60000);
                    checkConnection();
                }
            }).start();
        }
    }
}

由于此计数器变量将为5,因此该对话框将被取消。

一分钟后,此线程将被唤醒,您的互联网检查方法将继续。