Проверить подключение к Интернету в Android

Я разрабатываю приложение, которое проверяет, доступен ли Интернет или нет...

Я получаю помощь от этого.

Вот мой класс подключения:

  public class ChechConnection {

private Context _context;

public ChechConnection(Context context){
    this._context = context;
}

public boolean isConnectingToInternet(){
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null) 
      {
          NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null) 
              for (int i = 0; i < info.length; i++) 
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  {
                      return true;
                  }

      }
      return false;
}
}

И я использую этот код для проверки: это код для класса активности перезарядки

ChechConnection cDetactor;
Boolean isInternetPresent = false;

Если кто-то нажмет на кнопку, он должен что-то отобразить, если есть подключение к Интернету.

 cDetactor=new ChechConnection(getApplicationContext());
 isInternetPresent = cDetactor.isConnectingToInternet();


   btn_recharge.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
         if (isInternetPresent){
        Toast.makeText(mContext,"Button Pressed",Toast.LENGTH_LONG).show();
        }
        else
            alert.showAlertDialog(mContext,"Check Connection","Check Your Connection Setting",false);
    }
});

Это мой собственный диалоговый менеджер:

открытый класс ALertDialogManager {

public void showAlertDialog(final Context context, String title, String message,
        Boolean status) {
    final Dialog alertDialog = new Dialog(new ContextThemeWrapper(context, android.R.style.Theme_Translucent));
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    alertDialog.setCancelable(true);
    alertDialog.setContentView(R.layout.dialog);
    alertDialog.setTitle(title);

   Button ok=(Button) alertDialog.findViewById(R.id.btncancel);
   Button cancel=(Button) alertDialog.findViewById(R.id.btnsearch);
   ok.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        Activity activity=(Activity) context;
        activity.finish();
    }
});
   cancel.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        alertDialog.dismiss();
    }
});

    alertDialog.show();
}

}

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

04-29 11:26:15.011: E/AndroidRuntime(2177): Process: com.example.lifegoal, PID: 2177
04-29 11:26:15.011: E/AndroidRuntime(2177): java.lang.NullPointerException: Attempt to invoke virtual method 'void com.lifegoal.eshop.helper.ALertDialogManager.showAlertDialog(android.content.Context, java.lang.String, java.lang.String, java.lang.Boolean)' on a null object reference
04-29 11:26:15.011: E/AndroidRuntime(2177):     at com.lifegoal.eshop.Recharge_Activity$1.onClick(Recharge_Activity.java:51)

но если есть подключение к Интернету, он переходит к другой части и дает мне это значение logcat

Спасибо!


comment
Что там в строке 51 в Recharge_Activity?   -  person Paresh Mayani    schedule 29.04.2015
comment
предупреждение является нулевым объектом проверки предупреждения   -  person Prachi    schedule 29.04.2015
comment
@PareshMayanin проверьте еще раз, что я редактировал   -  person Tufan    schedule 29.04.2015
comment
да, теперь у меня есть подключение к Интернету, оно не должно попасть в другую часть @Prachi   -  person Tufan    schedule 29.04.2015
comment
я думаю, что mContext равно нулю, проверьте это   -  person Shayan Pourvatan    schedule 29.04.2015
comment
isInternetPresent, где вы устанавливаете это значение в своем коде?   -  person Lochana Ragupathy    schedule 29.04.2015
comment
Правильно ли вы следуете этому руководству, где isInternetPresent = cDetactor.isConnectingToInternet(); и вы инициализируете объект cDetactor.   -  person Codelord    schedule 29.04.2015
comment
Создали ли вы объект класса AlertManager.. который вы используете как alert.someMethod()... Думаю, оповещение не инициализировано..   -  person DJphy    schedule 29.04.2015
comment
@CodeLord, ты действительно классный..я забыл его заинтриговать....спасибо братан   -  person Tufan    schedule 29.04.2015
comment
@Tufan, так что ваша проблема решена, позвольте мне опубликовать ответ. Отметил как правильный.   -  person Codelord    schedule 29.04.2015
comment
извините @CodeLord, пока моя проблема не будет решена, я могу принять ... теперь она выполняется в настоящее время при наличии Интернета, но если она недоступна, она принудительно закрывается   -  person Tufan    schedule 29.04.2015
comment
Дайте мне знать, в чем проблема прямо сейчас, опубликуйте все подробности еще раз в вопросе. Я думаю, вы не можете инициализировать свою переменную предупреждения.   -  person Codelord    schedule 29.04.2015


Ответы (5)


используйте этот метод:

public static boolean isDeviceOnline(Context context) {
        boolean isConnectionAvail = false;
        try {
            ConnectivityManager cm = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            if(netInfo != null)
            return netInfo.isConnected();
            else 
                return isConnectionAvail;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isConnectionAvail;
    }
person Akshay Paliwal    schedule 29.04.2015

Это очень распространенная проблема. Каждый раз следуйте построчным инструкциям. Я думаю, вы забыли инициализацию вашей переменной cDetactor. И всегда следуйте стандартам кодирования, чтобы исключить такие ошибки.

person Codelord    schedule 29.04.2015
comment
@Tufan проверить ответ - person Codelord; 29.04.2015

ConnectivityManager connMgr = (ConnectivityManager) this
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    final android.net.NetworkInfo wifi = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    boolean connection_check = isConnectingToInternet();
    if (connection_check) {
        newuser.setEnabled(false);
        spinner.setVisibility(View.VISIBLE);
}

    else 
        Toast.makeText(this, "No Internet Connection", Toast.LENGTH_SHORT)
                .show();



public boolean isConnectingToInternet() {
    ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {

                    return true;
                }

    }
    return false;
}

Я думаю, что это. могу помочь тебе

person Rakshit Nawani    schedule 29.04.2015

Создайте класс NetworkInformation.java.

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkInformation {

     private static NetworkInfo networkInfo;

     public static boolean isConnected(Context context) {

             ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

             try{
                networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            } catch (Exception e) {
                e.printStackTrace();
            }

            // test for connection for WIFI
            if (networkInfo != null
                    && networkInfo.isAvailable()
                    && networkInfo.isConnected()) {
                return true;
            }

            networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            // test for connection for Mobile
            if (networkInfo != null
                    && networkInfo.isAvailable()
                    && networkInfo.isConnected()) {
                return true;
            }

            return false;
      }




}

Теперь используйте класс для проверки наличия или отсутствия Интернета с помощью следующего кода:

 if(NetworkInformation.isConnected(Login.this)) 
                 {
                    //your code
                 }else{
                     Toast.makeText(Login.this,"No network connection",Toast.LENGTH_LONG).show();
                 }

Также не забудьте определить следующие разрешения в AndroidManifest.xml:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
person kgandroid    schedule 29.04.2015

Этот метод отлично работает:

public boolean checkInternetConnection(){
      ConnectivityManager connec = 
              (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);

  // Check for network connections
   if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
        connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
        connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
        connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {

       // if connected with internet


       return true;

   } else if (
     connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
     connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED  ) {


       return false;
   }
 return false;

}

И не забывайте про AndroidManifest.xml. Вы должны определить разрешения:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Удачи в кодировании)

person hornet2319    schedule 29.04.2015