我有一个功能检查是否有可用的网络连接,我注意到它已经崩溃了一些用户.这是功能:
public static boolean isOnline() { ConnectivityManager connectionManager = (ConnectivityManager) RouteForMeApplication.getInstance() .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectionManager == null) return false; boolean networkAvailable = connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected(); return networkAvailable;}
而我得到的错误:
java.lang.NullPointerException at com.route4me.routeoptimizer.utils.InternetUtils.isOnline(InternetUtils.java:14) at com.route4me.routeoptimizer.services.notes.SendNoteServiceDeferred.sendNote(SendNoteServiceDeferred.java:57) at com.route4me.routeoptimizer.services.notes.SendNoteServiceDeferred.performAction(SendNoteServiceDeferred.java:28) at com.route4me.routeoptimizer.services.AbstractService.run(AbstractService.java:75) at java.lang.Thread.run(Thread.java:841)
我不明白的是,为什么它仍然返回null,即使我正在检查getActiveNetworkInfo()是否为null.有任何想法吗?
EDIT1
该错误出现在“&& connectionManager.getActiveNetworkInfo().isConnected();”行上
解决方法:
很容易成为竞争条件.假设如果connectionManager.getActiveNetworkInfo()!= null为真,则在一纳秒后再次为真是不安全的.
像这样改写:
public static boolean isOnline() { ConnectivityManager connectionManager = (ConnectivityManager) RouteForMeApplication.getInstance() .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectionManager == null) { return false; } NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo() if (networkInfo == null) { return false; } return networkInfo.isConnected();}
总结 以上是内存溢出为你收集整理的android – ConnectivityManager getActiveNetworkInfo()返回null全部内容,希望文章能够帮你解决android – ConnectivityManager getActiveNetworkInfo()返回null所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)