Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法
在Android中,很多人會用如下的方法判斷當(dāng)前網(wǎng)絡(luò)是否可用:
/**
* 獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)(是否可用)
*/
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;
}
但是,如果有異常記錄的話,有可能看到如下的異常信息:

很多人不理解,明明已經(jīng)判斷是否為空了,為什么還是會出現(xiàn)空指針異常?這種異常往往出現(xiàn)在網(wǎng)絡(luò)狀態(tài)極不穩(wěn)定的時候,下面先看正確的寫法:
/**
* 獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)(是否可用)
*/
public static boolean isNetworkAvailable() {
ConnectivityManager connManager = (ConnectivityManager) BaseApplication.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager != null) {
/**
* 獲取網(wǎng)絡(luò)信息實體
* 由于從系統(tǒng)服務(wù)中獲取數(shù)據(jù)屬于進程間通信,基本類型外的數(shù)據(jù)必須實現(xiàn)Parcelable接口,
* NetworkInfo實現(xiàn)了Parcelable,獲取到的activeNetInfo相當(dāng)于服務(wù)中網(wǎng)絡(luò)信息實體對象的一個副本(拷貝),
* 所以,不管系統(tǒng)網(wǎng)絡(luò)服務(wù)中的實體對象是否置為了null,此處獲得的activeNetInfo均不會發(fā)生變化
*/
NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
return activeNetInfo.isAvailable();
}
}
return false;
}
至于為什么改成這樣寫就可以了,代碼注釋中已經(jīng)說的很明白了,還不太理解的可以去看看進程間通信(IPC)和Pacelable的知識。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android 自定義標(biāo)題欄 顯示網(wǎng)頁加載進度的方法實例
Android 自定義標(biāo)題欄 顯示網(wǎng)頁加載進度的方法實例,需要的朋友可以參考一下2013-06-06
Android網(wǎng)絡(luò)數(shù)據(jù)開關(guān)用法簡單示例
這篇文章主要介紹了Android網(wǎng)絡(luò)數(shù)據(jù)開關(guān)用法,通過自定義函數(shù)調(diào)用系統(tǒng)服務(wù)實現(xiàn)開關(guān)功能,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06

