为何两段网络连通性检测代码一段正常运行一段致APP崩溃?
为什么两段看似逻辑一致的代码会有运行差异?
嘿,这个问题其实是典型的**空指针异常(NullPointerException)**导致的崩溃,咱们来拆解一下核心差异:
两段代码的关键区别:判断条件的顺序
先看你写的两段代码里的核心判断逻辑:
第一段(正常运行):
if(checknetworkinfo != null && checknetworkinfo.isConnectedOrConnecting()){ LoaderManager manager = getLoaderManager(); manager.initLoader(EARTHQUAKE_LOADER_ID, null, EarthquakeActivity.this); } else { progressbar.setVisibility(View.GONE); blanktextview.setText(R.string.no_internet); }
第二段(崩溃):
if(checknetworkinfo.isConnectedOrConnecting()&& checknetworkinfo != null){ LoaderManager manager = getLoaderManager(); manager.initLoader(EARTHQUAKE_LOADER_ID, null, EarthquakeActivity.this); } else { progressbar.setVisibility(View.GONE); blanktextview.setText(R.string.no_internet); }
问题根源:Java的「短路与(&&)」特性
Java里的&&是短路逻辑与,意思是:如果第一个条件判断为false,第二个条件会直接跳过不执行。
- 第一段代码中,先判断
checknetworkinfo != null:如果设备没有网络,getActiveNetworkInfo()会返回null,第一个条件就为false,后面的isConnectedOrConnecting()根本不会执行,自然不会触发空指针,直接进入else分支处理无网络的情况。 - 第二段代码中,先调用
checknetworkinfo.isConnectedOrConnecting():如果此时checknetworkinfo是null,你试图调用一个null对象的方法,就会直接抛出NullPointerException,导致APP崩溃。
简单说就是:你得先确认对象不是null,再去调用它的方法,不然就会踩空指针的坑~
内容的提问来源于stack exchange,提问作者ayush aggarwal
相关产品推荐
相关产品推荐

