2017-02-21 26 views
0

Здесь есть код, который проверяет подключение к Интернету, а затем, если isconnected является ложным, отображает сообщение в диалоговом окне allert. Проблема в том, что если isconnected истинно и (я попытался включить if (isconnected) вместо if (! Connectedconnected)), то все работает. Но если я отключаю каждую сеть на своем телефоне, когда VM исполняет show(), каждое замораживание. Зачем? Спасибо всем:Alert dialog freeze my app

final AlertDialog.Builder dialog= new AlertDialog.Builder(this); 


    ((Button)findViewById(R.id.listabutton)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      AsyncTask asyncTask= new AsyncTask() { 
       boolean isconnected=true; 
       @Override 
       protected Object doInBackground(Object[] params) { 


         ConnectivityManager conMgr = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 

         NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); 
         isconnected = activeNetwork != null && 
           activeNetwork.isConnectedOrConnecting(); 
        Log.i("StateNet",isconnected+""); 


        return null; 
       } 

       @Override 
       protected void onPostExecute(Object o) { 
        if(!isconnected){ 

         dialog.setMessage("Controlla la tua conessione a internet") 
           .setTitle("Ops problemino con internet") 
           .setPositiveButton("Ok", ok) 
           .show(); 

        } 

        super.onPostExecute(o); 
       } 

      }; 
+0

Ого, вы просто принять ответ, который вставили копию от меня. –

+0

Извините, что я видел сначала другой onr –

+0

Справедливость делается. –

ответ

0

Для проверки подключения к Интернету вам не требуется AsyncTask, поэтому, пожалуйста, держите его простым.

Я думаю, что ваш метод OnClick должен выглядеть следующим образом:

@Override 
public void onClick(View v) { 
     if (isConnectionAvailable(context)) { 
      // connected 
     } else { 
      // not connected 
     } 
}; 

public static boolean isConnectionAvailable(Context context) { 
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 
    return networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected(); 
} 

Не забудьте ACCESS_NETWORK_STATE и разрешения INTERNET в манифесте.

0

Попробуйте с этим ...

((Button)findViewById(R.id.listabutton)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     if(isDeviceOnline(context)){ 
      //do something. 
     }else{ 
      AlertDialog.Builder dialog= new AlertDialog.Builder(context); 
      dialog.setMessage("Not connected"); 
      dialog.setTitle("Error!"); 
      dialog.setPositiveButton(.....); 
      dialog.create(); 
      dialog.show(); 
     } 

    } 
} 


public boolean isDeviceOnline(Context context) { 
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 
    return networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected(); 
} 

И да, добавьте разрешения ACCESS_NETWORK_STATE и INTERNET в файле манифеста