检查互联网连接Android

时间:2015-01-07 07:00:33

标签: android

我正在尝试下面的代码

ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() == null
&& !conMgr.getActiveNetworkInfo().isConnected()
&& !conMgr.getActiveNetworkInfo().isAvailable())

如何导致应用崩溃

当我使用

if (conMgr.getActiveNetworkInfo() == null)

每件事情都很好

什么是正确的使用方式

conMgr.getActiveNetworkInfo().isConnected()
conMgr.getActiveNetworkInfo().isAvailable())
这个!造成问题???

4 个答案:

答案 0 :(得分:1)

如果conMgr.getActiveNetworkInfo()==Null您遇到问题!conMgr.getActiveNetworkInfo().isConnected(),则无法在空值上检查isConnected()之类的方法。

您应该更改以下代码:

private boolean checkInternetConnection()
{    
        ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);  

        if (conMgr.getActiveNetworkInfo() != null    
                && conMgr.getActiveNetworkInfo().isAvailable()    
                && conMgr.getActiveNetworkInfo().isConnected()) 
        {

           return true;    
        }
        else 
        {
        return false;    
        }
    }

答案 1 :(得分:0)

您的条件逻辑存在缺陷:

if (conMgr.getActiveNetworkInfo() == null
&& !conMgr.getActiveNetworkInfo().isConnected()
&& !conMgr.getActiveNetworkInfo().isAvailable())

仅当getActiveNetworkInfo()返回null时,才会在返回值上调用方法(为null)。 &&是短路的,这意味着A && B B仅在A为真时进行评估。

您可能希望||取代&&。它同样也是短路的,这意味着A || B B仅在A为假时进行评估。

答案 2 :(得分:0)

使用此方法 -

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

您还需要添加权限 -

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

希望这会有所帮助:)

答案 3 :(得分:0)

你可以这样使用

private boolean isConnected(Context context){   
    ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo=null;   
    if (connectivityManager != null) {
        networkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (!networkInfo.isAvailable()) {
            networkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        }   
    }   
    return networkInfo == null ? false : networkInfo.isConnected(); 
}

您必须获得 manifest.xml

的权限
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>