检查Internet是否在线时应用程序崩溃

时间:2015-07-02 14:37:28

标签: java android

我正在尝试识别来自用户的连接是离线还是在线。

我建了一个班来检查它:

public class wifi {
    public static Context context;
    public static ConnectivityManager connec;
    public static final boolean isInternetOn(){

        // get Connectivity Manager object to check connection
        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

                Toast.makeText(context, " Connected ", Toast.LENGTH_LONG).show();
                return true;

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

                Toast.makeText(context, " Not Connected ", Toast.LENGTH_LONG).show();
                return false;
            }
          return false;
        }
}

在我需要的时候打电话,

我的主要活动:

public void login(View view) {
    if(wifi.isInternetOn() == true){
    gpsTracker = new GPSTracker(this);
    if (gpsTracker.getIsGPSTrackingEnabled())
    {
    Latitude = String.valueOf(gpsTracker.latitude);
    Longitude = String.valueOf(gpsTracker.longitude);

    Session.slatitude = Latitude;
    Session.slongitude = Longitude;

    String getemail = email.getText().toString();
    String getpassword = password.getText().toString();
    new SigninActivity(this, status).execute(getemail, getpassword,Latitude,Longitude);
    }
    }
}

但是当我运行我的代码时,我收到了这些错误:

07-02 15:34:24.052: E/AndroidRuntime(10026): FATAL EXCEPTION: main 07-02 15:34:24.052: E/AndroidRuntime(10026): 
java.lang.ExceptionInInitializerError 07-02 15:34:24.052: E/AndroidRuntime(10026):  
at com.tapp.myapp.MainActivity.login(MainActivity.java:168) 07-02 15:34:24.052: 
E/AndroidRuntime(10026):    at com.tapp.myapp.MainActivity$1$1.onCompleted(MainActivity.java:116) 07-02 15:34:24.052: 
E/AndroidRuntime(10026): Caused by: java.lang.NullPointerException 07-02 15:34:24.052: 
E/AndroidRuntime(10026):    at com.tapp.myapp.wifi.<clinit>(wifi.java:9) 07-02 15:34:24.052: E/AndroidRuntime(10026):   ... 13 more

我做错了什么?

2 个答案:

答案 0 :(得分:0)

检查您的上下文值。 Contextnull

答案 1 :(得分:0)

如果设备不支持您传入的类型,

ConnectivityManager#getNetworkInfo(int type)将返回<div class="user-logged-in"> <div class="content"> <div class="user-name" id="firstName">(Name Here) <span class="text-muted f9">admin</span></div> <div class="user-email" id="userEmail">(Email Here)</div> <div class="user-actions"> <a class="m-r-5" href="">settings</a> <a href="/first/login">logout</a> </div> </div> </div>

我不确定为什么要将null0的常量值传递给此方法,但我猜这些参数并不代表您认为它们的含义

您应该使用ConnectivityManager的TYPE_常量,例如TYPE_MOBILE

您正在使用的常量(0和1)分别指代1TYPE_MOBILE,但如果您在诸如模拟器之类的设备上运行此常量,则其中一个或两个可能很容易不支持的。

由于设备可能不支持您正在检查的一种或多种类型,因此您还应该对TYPE_WIFI的返回值进行空值检查。

请注意,如果您关心的是用户是否已连接到互联网,那么您可能无需检查显式类型。只需拨打getActivityNetworkInfo(),即可获得用户的有效网络连接。检查它是否为空(它们可能没有活动连接),然后检查其状态以查看它是否已连接。