編輯:關於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)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
Notification(Notification的通知欄常駐、Notification的各種樣式、Notification點擊無效)
Android的Notification是android系統中很重要的一個機制, 產品人員常常利用通知欄的方式,跟用戶進行弱溝通。擁有推送通知的app要比沒有此類功能的a
Android開發自學筆記(三):APP布局上
hello,大家好,本文主要介紹如何開始開發一個美觀、有情調、人見人愛的Android應用程序,已知我們在市面上有不少布局極其精美,在視覺上讓人愛不釋手的應用程序,如果讓
Android 仿QQ分組管理可拖動Item的ListView(附源碼)
趁著周一休息,更新一下博客。最近項目中使用到了分組管理,需要實現Listview的Item拖動處理。查略一下資料和借鑒了別人的代碼將功能實現了。現在整理一下代碼,方便自己
安卓Andriod使用入門(十二)
MainActivity.java代碼:package siso.mycrawler;import android.app.Activity;import android