2014-02-13 28 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。

但我想我主要關心的是,我不確定這是一個很好的用戶體驗。我認爲你需要從用戶的角度來看待這個問題,並思考如果沒有可用的網絡,他們會發生什麼。我不相信給他們這樣的對話是最佳的解決方案。