检查网络连接

时间:2018-01-06 14:42:20

标签: android

当我使用以下代码时,我的应用程序将运行:

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);
    }

为什么会发生这种情况,我认为两者都是一样的?

2 个答案:

答案 0 :(得分:2)

我认为它只是一个 NullPointerException 。请参阅下面的代码。

if(checknetworkinfo.isConnectedOrConnecting()&& checknetworkinfo != null)

现在,如果checknetworkinfo Null ,则会抛出Nullpointer因为您在第二个条件中检查是否为null。您应首先检查null,然后检查其他条件。所以它应该是。

if(checknetworkinfo != null && checknetworkinfo.isConnectedOrConnecting())

答案 1 :(得分:0)

正如documentationgetActiveNetworkInfo() 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。