Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時(shí)出現(xiàn)空指針(NullPointerException)問(wèn)題的解決方法
在Android中,很多人會(huì)用如下的方法判斷當(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)判斷是否為空了,為什么還是會(huì)出現(xiàn)空指針異常?這種異常往往出現(xiàn)在網(wǎng)絡(luò)狀態(tài)極不穩(wěn)定的時(shí)候,下面先看正確的寫法:
/**
* 獲取當(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ò)信息實(shí)體
* 由于從系統(tǒng)服務(wù)中獲取數(shù)據(jù)屬于進(jìn)程間通信,基本類型外的數(shù)據(jù)必須實(shí)現(xiàn)Parcelable接口,
* NetworkInfo實(shí)現(xiàn)了Parcelable,獲取到的activeNetInfo相當(dāng)于服務(wù)中網(wǎng)絡(luò)信息實(shí)體對(duì)象的一個(gè)副本(拷貝),
* 所以,不管系統(tǒng)網(wǎng)絡(luò)服務(wù)中的實(shí)體對(duì)象是否置為了null,此處獲得的activeNetInfo均不會(huì)發(fā)生變化
*/
NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
return activeNetInfo.isAvailable();
}
}
return false;
}
至于為什么改成這樣寫就可以了,代碼注釋中已經(jīng)說(shuō)的很明白了,還不太理解的可以去看看進(jìn)程間通信(IPC)和Pacelable的知識(shí)。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時(shí)出現(xiàn)空指針(NullPointerException)問(wèn)題的解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
這篇文章主要給大家介紹了關(guān)于如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Android實(shí)現(xiàn)獲取簽名及公鑰的方法
這篇文章主要介紹了Android實(shí)現(xiàn)獲取簽名及公鑰的方法,可實(shí)現(xiàn)Android通過(guò)包名獲取相關(guān)簽名及公鑰的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android 自定義標(biāo)題欄 顯示網(wǎng)頁(yè)加載進(jìn)度的方法實(shí)例
Android 自定義標(biāo)題欄 顯示網(wǎng)頁(yè)加載進(jìn)度的方法實(shí)例,需要的朋友可以參考一下2013-06-06
Android項(xiàng)目遷移到AndroidX的方法步驟
這篇文章主要介紹了Android項(xiàng)目遷移到AndroidX的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Android網(wǎng)絡(luò)數(shù)據(jù)開關(guān)用法簡(jiǎn)單示例
這篇文章主要介紹了Android網(wǎng)絡(luò)數(shù)據(jù)開關(guān)用法,通過(guò)自定義函數(shù)調(diào)用系統(tǒng)服務(wù)實(shí)現(xiàn)開關(guān)功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Android自定義view實(shí)現(xiàn)倒計(jì)時(shí)控件
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)倒計(jì)時(shí)控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10

