Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中利用NetworkInfo判斷網絡狀態時出現空指針(NullPointerException)問題的解決方法

Android中利用NetworkInfo判斷網絡狀態時出現空指針(NullPointerException)問題的解決方法

編輯:關於Android編程

在Android中,很多人會用如下的方法判斷當前網絡是否可用:

/** 
* 獲取當前網絡狀態(是否可用) 
*/ 
public static boolean isNetworkAvailable() { 
boolean isAalable = false; 
ConnectivityManager connManager = (ConnectivityManager) BaseApplication.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); 
if (connManager != null && connManager.getActiveNetworkInfo() != null) { 
isAalable = connManager.getActiveNetworkInfo().isAvailable(); 
} 
return isAalable; 
}

但是,如果有異常記錄的話,有可能看到如下的異常信息:

很多人不理解,明明已經判斷是否為空了,為什麼還是會出現空指針異常?這種異常往往出現在網絡狀態極不穩定的時候,下面先看正確的寫法:

/** 
* 獲取當前網絡狀態(是否可用) 
*/ 
public static boolean isNetworkAvailable() { 
ConnectivityManager connManager = (ConnectivityManager) BaseApplication.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); 
if (connManager != null) { 
/** 
* 獲取網絡信息實體 
* 由於從系統服務中獲取數據屬於進程間通信,基本類型外的數據必須實現Parcelable接口, 
* NetworkInfo實現了Parcelable,獲取到的activeNetInfo相當於服務中網絡信息實體對象的一個副本(拷貝), 
* 所以,不管系統網絡服務中的實體對象是否置為了null,此處獲得的activeNetInfo均不會發生變化 
*/ 
NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo(); 
if (activeNetInfo != null) { 
return activeNetInfo.isAvailable(); 
} 
} 
return false; 
}

至於為什麼改成這樣寫就可以了,代碼注釋中已經說的很明白了,還不太理解的可以去看看進程間通信(IPC)和Pacelable的知識。

以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網絡狀態時出現空指針(NullPointerException)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved