2014-02-13 29 views
0

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

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

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

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

} 

感谢 Mindus

+0

你不觉得这会发生循环过程... ????? – SilentKiller

+0

是的,我想实施这个过程 – mindus

回答

-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此对话框将被解雇。

一分钟后,此线程会醒来,您的网络检查方法将继续。

+0

这段代码看起来有缺陷。我认为它可以在不在事件线程中时调用Dialog,而且我非常快速的审查表明它永远不会停止递归调用checkConnection()。你可以请审查和纠正? –

+0

@PeterStrange请阅读有关要求,用户希望不断检查互联网连接。也想关闭对话框。所以我不认为有任何其他解决方案,而不是这个,如果有任何其他可用,然后请提供。 – SilentKiller

+0

有两件事:(1)不起作用的代码不是任何问题的解决方案 - 你的代码是否工作? (2)这里的问题可以通过很多方法很容易地解决,最简单的方法是去除代码和'循环'的递归调用,直到满足一些最终条件。结束条件可能是网络可用,或者超出某个计数器,或者用户对该对话框回应NO。 –

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

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