Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题的解决方法
程序员文章站
2024-02-29 11:43:34
在android中,很多人会用如下的方法判断当前网络是否可用:
/**
* 获取当前网络状态(是否可用)
*/
public static boole...
在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)问题的解决方法,希望对大家有所帮助
上一篇: Java8新特性lambda表达式有什么用(用法实例)
下一篇: java 实现音乐播放器的简单实例