Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry Dialog.ask()如何再次调用相同的方法_Blackberry_Blackberry Simulator - Fatal编程技术网

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

Blackberry Dialog.ask()如何再次调用相同的方法,blackberry,blackberry-simulator,Blackberry,Blackberry Simulator,我想检查网络连接是否可用。如果不可用,则显示一个对话框,单击对话框中的“确定”按钮,然后再次检查网络连接等。在这里,我一次又一次地调用相同的方法。问题是在对话框中单击ok按钮时,它调用了相同的方法,但对话框没有关闭 如果我们一次又一次地调用相同的方法,有人知道如何关闭对话框吗 乙二醇 谢谢 Mindus通过观察你的方法,你有一个检查互联网连接的循环过程,它只会在有输入和互联网连接时结束 关闭此对话框的另一种方法是设置计数器变量 请尝试以下代码: public static final int m

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

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

乙二醇

谢谢
Mindus

通过观察你的方法,你有一个检查互联网连接的循环过程,它只会在有输入和互联网连接时结束

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

请尝试以下代码:

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,此对话框将被取消


一分钟后,此线程将被唤醒,您的internet检查方法将再次继续。

以下是上述方法的一个实现,它在循环中处理,而不是递归处理,从而更容易管理结束条件:

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方法的作用。它可能是阻塞的,在这种情况下,我们需要重新编写此代码以使其脱离事件线程


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

你不认为这会在循环过程中发生吗…???是的,我想实现这个过程。这段代码在我看来是错误的。我认为它可以在不在事件线程上时调用Dialog,我的快速回顾表明它永远不会停止递归调用checkConnection。您能检查并更正吗?@PeterStrange请阅读问题中给出的要求用户希望经常检查互联网连接。并希望关闭该对话框。因此,我认为没有任何其他解决方案可以替代此解决方案,如果有其他解决方案,请提供。两件事:1不工作的代码不是任何问题的解决方案-您的代码工作吗?2这里的问题可以通过许多方法轻松解决,最简单的方法是删除代码的递归调用和“循环”,直到满足某些最终条件。最终条件可能是网络可用或超出某些计数器,或者用户对对话框的响应为“否”。@PeterStrange那么您一定已经检查了我的代码。你最好回答这个问题并帮助用户找到解决方案。你最好回答这个问题,但是如果你修改了自己的代码,这不是也很有用吗?我认为你所做的方式是可行的,只是不像目前编码的那样。我还在另一个论坛上回答了这个问题,请参见:
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