冷皇的废后免费阅读,依兰交友,wwwzzz13com
在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 studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论