2014-12-31 3 views
0

Heres мой код для проверки сетевого подключения моего приложения. Мне нужно, чтобы мое приложение запускалось только тогда, когда оно подключено к сети и закрывает его, если нет. Код работал без ошибок, но проблема в том, что alertdialog показывается много раз.проверка сетевого соединения android

private void checkConnectivity(){ 

     final Thread checkConnection = new Thread(new Runnable(){ 
      @Override 
      public void run() 
      { 

       while (checkCon == true){ 
       if(!isNetworkAvailable(MainActivity.this)) { 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          // TODO Auto-generated method stub 
          new AlertDialog.Builder(MainActivity.this) 
          .setMessage("No network connection.") 
          .setCancelable(false) 
          .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface d, int which) {         
            checkCon = false; 
            finish(); 

           } 
          }).show();               


         } 
        });       
        } else { 
         checkCon = true; 
        } 

      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       }} 
     }); 
     checkConnection.start(); 


    } 
+0

Почему вы используете цикл 'while'? –

+0

, чтобы закрыть тему –

+0

Из кода кажется простым исправлением, если вы установите _checkCon = false_ вправо, где вы показываете/создаете диалог (не только после закрытия пользователем диалога). В настоящее время цикл, похоже, продолжает воссоздавать диалоги, пока пользователь не закрывает один из них. – harism

ответ

0

Ответа на harism, благодаря

private void checkConnectivity(){ 

     final Thread checkConnection = new Thread(new Runnable(){ 
      @Override 
      public void run() 
      { 

       while (checkCon == true){ 
       if(!isNetworkAvailable(MainActivity.this)) { 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          // TODO Auto-generated method stub 
          new AlertDialog.Builder(MainActivity.this) 
          .setMessage("No network connection.") 
          .setCancelable(false) 
          .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface d, int which) {         

            finish();          
           } 

          }).show(); 
          checkCon = false; 
         } 
        });       
        } else { 
         checkCon = true; 
        } 

      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       }} 
     }); 
     checkConnection.start(); 


    } 
0

Добавить новый метод в ваш текущий Activity или Fragment:

private boolean isNetworkAvailable(){ 
     boolean available = false; 
     /** Getting the system's connectivity service */ 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

     /** Getting active network interface to get the network's status */ 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

     if(networkInfo !=null && networkInfo.isAvailable()) 
      available = true; 

     /** Returning the status of the network */ 
     return available; 
    } 

А вот как его использовать. Вы можете использовать его внутри метода onCreate():

if (isNetworkAvailable() == true){ // if network is available 
    // do your thing here 
    ... 
}else{ // "else" means that the network is not available 
    // do your thing here 
    ... 
} 
Смежные вопросы