[英]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
我究竟做錯了什么?
檢查您的上下文值。 Context
為null
。
如果設備不支持您傳入的類型,則ConnectivityManager#getNetworkInfo(int type)
將返回null
。
我不確定為什么要將0
和1
常量值傳遞給此方法,但是我的猜測是這些參數並不代表您認為的含義。
您應該使用ConnectivityManager
的TYPE_常量,例如TYPE_MOBILE
。
您正在使用的常量(0和1)分別引用TYPE_MOBILE
和TYPE_WIFI
,但是如果您在模擬器等設備上運行該TYPE_WIFI
,則很容易不支持其中之一或全部。
因為設備可能不支持您要檢查的一種或多種類型,所以還應該對getNetworkInfo()
的返回值進行空檢查。
請注意,如果您只關心用戶是否已連接到Internet,則可能始終不需要檢查顯式類型。 只需調用getActivityNetworkInfo()
,您將獲得用戶的活動網絡連接。 檢查它是否為空(它們可能沒有活動的連接),然后檢查其狀態以查看是否已連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.