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ò)信息實(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í)體對象的一個副本(拷貝), * 所以,不管系統(tǒng)網(wǎng)絡(luò)服務(wù)中的實(shí)體對象是否置為了null,此處獲得的activeNetInfo均不會發(fā)生變化 */ NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo(); if (activeNetInfo != null) { return activeNetInfo.isAvailable(); } } return false; }
至于為什么改成這樣寫就可以了,代碼注釋中已經(jīng)說的很明白了,還不太理解的可以去看看進(jìn)程間通信(IPC)和Pacelable的知識。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android自定義View實(shí)現(xiàn)標(biāo)簽流效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)標(biāo)簽流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Android Studio 4.0 新功能中的Live Layout Inspector詳解
這篇文章主要介紹了Android Studio 4.0 新功能中的Live Layout Inspector,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android LayerDrawable超詳細(xì)講解
一個LayerDrawable是一個可以管理一組drawable對象的drawable。在LayerDrawable的drawable資源按照列表的順序繪制,所以列表的最后一個drawable繪制在最上層2022-11-11詳解OpenGL Shader抗鋸齒的實(shí)現(xiàn)
普通繪制圓形形狀時可以看到圖形邊緣會有明顯鋸齒現(xiàn)象并不像真實(shí)圓形形狀一樣圓潤邊緣平滑。本文將介紹如何通過自制函數(shù)實(shí)現(xiàn)抗鋸齒,需要的可以參考一下2022-02-02Android?SharedPreferences性能瓶頸解析
這篇文章主要為大家介紹了Android?SharedPreferences性能瓶頸解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android Retrofit2網(wǎng)路編程實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Android Retrofit2網(wǎng)路編程實(shí)現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12Android中通過RxJava進(jìn)行響應(yīng)式程序設(shè)計的入門指南
響應(yīng)式編程在Android中的運(yùn)用是非常犀利的,比如在異常處理和調(diào)度器方面,這里我們將從生命周期等方面來講解Android中通過RxJava進(jìn)行響應(yīng)式程序設(shè)計的入門指南:2016-06-06