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.