在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)說的很明白了,還不太理解的可以去看看進(jìn)程間通信(IPC)和Pacelable的知識(shí)。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時(shí)出現(xiàn)空指針(NullPointerException)問題的解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選