欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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; 
}

但是,如果有异常记录的话,有可能看到如下的异常信息:

Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题的解决方法

很多人不理解,明明已经判断是否为空了,为什么还是会出现空指针异常?这种异常往往出现在网络状态极不稳定的时候,下面先看正确的写法:

/** 
* 获取当前网络状态(是否可用) 
*/ 
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)问题的解决方法,希望对大家有所帮助