Android中利用NetworkInfo判斷網(wǎng)絡狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法
在Android中,很多人會用如下的方法判斷當前網(wǎng)絡是否可用:
/** * 獲取當前網(wǎng)絡狀態(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)絡狀態(tài)極不穩(wěn)定的時候,下面先看正確的寫法:
/** * 獲取當前網(wǎng)絡狀態(tài)(是否可用) */ public static boolean isNetworkAvailable() { ConnectivityManager connManager = (ConnectivityManager) BaseApplication.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); if (connManager != null) { /** * 獲取網(wǎng)絡信息實體 * 由于從系統(tǒng)服務中獲取數(shù)據(jù)屬于進程間通信,基本類型外的數(shù)據(jù)必須實現(xiàn)Parcelable接口, * NetworkInfo實現(xiàn)了Parcelable,獲取到的activeNetInfo相當于服務中網(wǎng)絡信息實體對象的一個副本(拷貝), * 所以,不管系統(tǒng)網(wǎng)絡服務中的實體對象是否置為了null,此處獲得的activeNetInfo均不會發(fā)生變化 */ NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo(); if (activeNetInfo != null) { return activeNetInfo.isAvailable(); } } return false; }
至于為什么改成這樣寫就可以了,代碼注釋中已經(jīng)說的很明白了,還不太理解的可以去看看進程間通信(IPC)和Pacelable的知識。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網(wǎng)絡狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
Android Studio 4.0 新功能中的Live Layout Inspector詳解
這篇文章主要介紹了Android Studio 4.0 新功能中的Live Layout Inspector,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android?SharedPreferences性能瓶頸解析
這篇文章主要為大家介紹了Android?SharedPreferences性能瓶頸解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02Android Retrofit2網(wǎng)路編程實現(xiàn)方法詳解
這篇文章主要介紹了Android Retrofit2網(wǎng)路編程實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12Android中通過RxJava進行響應式程序設計的入門指南
響應式編程在Android中的運用是非常犀利的,比如在異常處理和調度器方面,這里我們將從生命周期等方面來講解Android中通過RxJava進行響應式程序設計的入門指南:2016-06-06