网络连接

时间:2014-10-21 07:05:00

标签: android

我正在使用ConnectivityManager。我不知道我的代码发生了什么,如果互联网连接,它总是返回null。请帮助我。

public static boolean isOnline(Context ctx) {
    // Toast.makeText(ctx,"get", Toast.LENGTH_LONG).show();
    ConnectivityManager mManager = (ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo mNetworkInfo = mManager.getActiveNetworkInfo();
    if ((mNetworkInfo != null) && (mNetworkInfo.isConnected())) {
        return true;
    }
    return false;
    }


        if (NetworkConnection.isOnline(TIENews.this)) {
            new GetNewsDetailAsyncTask(TIENews.this, url, newsListView)
                    .execute();
        } else {
            Log.e("tag", "netIno return null");
            super.OpenWiFiDialog(getResources().getString(
                    R.string.internet_error_msg));
        }
    }
亲爱的,谢谢。我的代码在今天之前运行正常,应用程序也是实时的。但是我不知道在这段代码中从最后几天到当前时间发生了什么并且无法运行。我没有遇到问题

5 个答案:

答案 0 :(得分:1)

代码似乎很好。我认为上下文的问题,即上下文是否为Manifest中的Internet权限..所以请检查它。

答案 1 :(得分:0)

这是检查网络是否存在的方式:

ConnectivityManager

方法1

public boolean isConnected(){
  boolean result=false;
  ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
    .getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
  if (null != activeNetwork) {
            if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
             {
              result=true;
             msg="You are connected to a WiFi Network";
             }
            if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            {
                result=true;
              msg="You are connected to a Mobile Network";
               }
            }   
  else{
   msg = "No internet Connectivity";
 result=false;
}

   return result;
 }

方法2

public  boolean isConnected() {
  ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
    .getSystemService(Context.CONNECTIVITY_SERVICE);
   // test
   if (cm.getActiveNetworkInfo() != null
     && cm.getActiveNetworkInfo().isAvailable()
     && cm.getActiveNetworkInfo().isConnected()) {

   msg="You are connected to a Network";

   return true;
   } else {

    msg = "No internet Connectivity";

    return false;
   }
  }

将此行添加到您的清单中:

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

答案 2 :(得分:0)

我在代码中找不到任何错误。可能是上下文为null。

或者你可以简单地尝试这一简单的代码来检查互联网连接......

// by default - its false
    private boolean isInternetConnected = false;

// Check the internet connectivity 

    isInternetConnected = Utilities.isInternetAvailable(MainActivity.this);

if(isInternetConnected){
  // perform here
}

public static boolean isInternetAvailable(Context context) {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;
        boolean connectionavailable = false;
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        NetworkInfo informationabtnet = cm.getActiveNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            try {
                if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                   if (ni.isConnected())
                       haveConnectedWifi = true;
                if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                   if (ni.isConnected())
                       haveConnectedMobile = true;
                if (informationabtnet.isAvailable()
                       && informationabtnet.isConnected())
                   connectionavailable = true;

            } catch (Exception e) {

                System.out.println("Inside utils catch clause , exception is"
                       + e.toString());
                e.printStackTrace();
            }
        }
        return haveConnectedWifi || haveConnectedMobile;
     }

还要在清单中添加互联网权限。

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

答案 3 :(得分:0)

    public class ConnectionDetector {

        private Context _context;

        public ConnectionDetector(Context context) {
            this._context = context;
        }

        public boolean isConnectingToInternet() {
            ConnectivityManager connectivity = (ConnectivityManager) _context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i < info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return true;
                        }

            }
            return false;

Use this code. Its working

答案 4 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

public boolean isNetwokReachable() {
   ConnectivityManager connectivityManager = (ConnectivityManager) mSmartAndroidActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
   if (connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo() .isConnected()) {
       return true;
   } else {
       return false;
   }
}

在AndroidManifest.xml中添加以下所需权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
相关问题