2014-02-13 3 views
0

Я хочу проверить, доступно ли сетевое подключение или нет. Если он недоступен, я показываю диалог и нажатие кнопки ok в диалоговом окне, а затем мне нужно проверить сетевое подключение и так далее. Здесь я вызываю один и тот же метод снова и снова. Проблема заключается в нажатии кнопки ok в диалоговом окне, вызывающем тот же метод, но диалог не закрывается.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) проблема здесь может быть легко решена с помощью ряда методов, самым простым из которых является удаление рекурсивного вызова кода и «цикла» до тех пор, пока не будут выполнены некоторые конечные условия.Конечные условия могут быть доступны в сети или превышен какой-либо счетчик, или пользователь отвечает НЕТ на Диалог. –

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(). Это может быть блокировка, и в этом случае нам нужно переработать этот код, чтобы избавиться от потока событий.

Но, я думаю, моя главная проблема заключается в том, что я не уверен, что это хороший пользовательский опыт. Я думаю, вам нужно взглянуть на это с точки зрения пользователя и подумать о том, что они хотели бы сделать, если бы сеть не была доступна. Я не уверен, что их диалог такой, как это оптимальное решение.

Смежные вопросы