当我使用以下代码时,我的应用程序将运行:
private ConnectivityManager checknetworkconnectivity;
private NetworkInfo checknetworkinfo;
checknetworkconnectivity = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
checknetworkinfo = checknetworkconnectivity.getActiveNetworkInfo();
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);
}
但是当我使用下面的代码app cracks时:
private ConnectivityManager checknetworkconnectivity;
private NetworkInfo checknetworkinfo;
checknetworkconnectivity = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
checknetworkinfo = checknetworkconnectivity.getActiveNetworkInfo();
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);
}
为什么会发生这种情况,我认为两者都是一样的?
答案 0 :(得分:2)
我认为它只是一个 NullPointerException 。请参阅下面的代码。
if(checknetworkinfo.isConnectedOrConnecting()&& checknetworkinfo != null)
现在,如果checknetworkinfo
Null ,则会抛出Nullpointer因为您在第二个条件中检查是否为null。您应首先检查null,然后检查其他条件。所以它应该是。
if(checknetworkinfo != null && checknetworkinfo.isConnectedOrConnecting())
答案 1 :(得分:0)
正如documentation,getActiveNetworkInfo() returns NULL when there is no default currently active network.
考虑一个简单的AND语句,如:<condition A> && <condition B>
由于这是AND运算符,因此条件都必须为真。
在Java中,如果第一个条件出现错误,则第二个条件甚至不会被执行(或检查),因为它无论是真还是假都不会有任何区别。 (AND运算符仍将返回false)
在if(checknetworkinfo != null && checknetworkinfo.isConnectedOrConnecting())
中,变量checknetworkinfo
在执行第二个条件期间永远不能为NULL,因为在检查第二个条件之前,第一个条件必须始终为真。
Howerver,in if(checknetworkinfo.isConnectedOrConnecting()&& checknetworkinfo !=
null)
不检查变量checknetworkinfo
是否为NULL。所以当它为NULL时,会导致NullPointerException。