Android 检查网络连接
当我使用以下代码时,我的应用程序将运行:Android 检查网络连接,android,Android,当我使用以下代码时,我的应用程序将运行: private ConnectivityManager checknetworkconnectivity; private NetworkInfo checknetworkinfo; checknetworkconnectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); checknetworkinfo = checknetworkcon
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);
}
但当我使用以下代码应用程序crahes时:
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);
}
为什么会发生这种情况,我认为两者是相同的?我认为这只是一个空点异常。请参阅下面的代码
if(checknetworkinfo.isConnectedOrConnecting()&& checknetworkinfo != null)
现在,如果checknetworkinfo
为Null,那么它将抛出Null指针,因为您正在第二个条件中检查Null。您应该首先检查null,然后检查其他条件。所以应该是这样
if(checknetworkinfo != null && checknetworkinfo.isConnectedOrConnecting())
如中所述,getActiveNetworkInfo()在当前没有默认活动网络时返回NULL。
考虑这样一个简单的语句:&&
因为这是一个AND运算符,所以两个条件都必须为真。
在Java中,如果第一个条件为false,则第二个条件甚至不会执行(或检查),因为它不会对true或false产生任何区别。(操作员仍将返回false) 在
if(checknetworkinfo!=null&&checknetworkinfo.isConnectedOrConnecting())
中,变量checknetworkinfo
在执行第二个条件期间不能为null,因为第一个条件必须始终为true,然后才能检查第二个条件。然而,在
if(checknetworkinfo.isConnectedOrConnecting()中&&checknetworkinfo!=
null)
未检查变量checknetworkinfo
是否为null。因此,当它为NULL时,将导致一个NullPointerException。使用LogCat检查与崩溃相关的Java堆栈跟踪:老实说,我不知道为什么会出现向下投票。这是一个提供了代码示例的合法问题。我正要提到这一点+1.