簡體   English   中英

檢查Internet是否在線時應用程序崩潰

[英]Application crashes when checking if Internet is online

我試圖識別來自用戶的連接是脫機還是在線。

我建立了一個類來檢查它:

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

我究竟做錯了什么?

檢查您的上下文值。 Contextnull

如果設備不支持您傳入的類型,則ConnectivityManager#getNetworkInfo(int type)將返回null

我不確定為什么要將01常量值傳遞給此方法,但是我的猜測是這些參數並不代表您認為的含義。

您應該使用ConnectivityManager的TYPE_常量,例如TYPE_MOBILE

您正在使用的常量(0和1)分別引用TYPE_MOBILETYPE_WIFI ,但是如果您在模擬器等設備上運行該TYPE_WIFI ,則很容易不支持其中之一或全部。

因為設備可能不支持您要檢查的一種或多種類型,所以還應該對getNetworkInfo()的返回值進行空檢查。

請注意,如果您只關心用戶是否已連接到Internet,則可能始終不需要檢查顯式類型。 只需調用getActivityNetworkInfo() ,您將獲得用戶的活動網絡連接。 檢查它是否為空(它們可能沒有活動的連接),然后檢查其狀態以查看是否已連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM