編輯:關於Android編程
在Android中,很多人會用如下的方法判斷當前網絡是否可用:
/** * 獲取當前網絡狀態(是否可用) */ 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; }
但是,如果有異常記錄的話,有可能看到如下的異常信息:
很多人不理解,明明已經判斷是否為空了,為什麼還是會出現空指針異常?這種異常往往出現在網絡狀態極不穩定的時候,下面先看正確的寫法:
/** * 獲取當前網絡狀態(是否可用) */ public static boolean isNetworkAvailable() { ConnectivityManager connManager = (ConnectivityManager) BaseApplication.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); if (connManager != null) { /** * 獲取網絡信息實體 * 由於從系統服務中獲取數據屬於進程間通信,基本類型外的數據必須實現Parcelable接口, * NetworkInfo實現了Parcelable,獲取到的activeNetInfo相當於服務中網絡信息實體對象的一個副本(拷貝), * 所以,不管系統網絡服務中的實體對象是否置為了null,此處獲得的activeNetInfo均不會發生變化 */ NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo(); if (activeNetInfo != null) { return activeNetInfo.isAvailable(); } } return false; }
至於為什麼改成這樣寫就可以了,代碼注釋中已經說的很明白了,還不太理解的可以去看看進程間通信(IPC)和Pacelable的知識。
以上所述是小編給大家介紹的Android中利用NetworkInfo判斷網絡狀態時出現空指針(NullPointerException)問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
Android的Notification是android系統中很重要的一個機制, 產品人員常常利用通知欄的方式,跟用戶進行弱溝通。擁有推送通知的app要比沒有此類功能的a
hello,大家好,本文主要介紹如何開始開發一個美觀、有情調、人見人愛的Android應用程序,已知我們在市面上有不少布局極其精美,在視覺上讓人愛不釋手的應用程序,如果讓
趁著周一休息,更新一下博客。最近項目中使用到了分組管理,需要實現Listview的Item拖動處理。查略一下資料和借鑒了別人的代碼將功能實現了。現在整理一下代碼,方便自己
MainActivity.java代碼:package siso.mycrawler;import android.app.Activity;import android