网络上的主线程异常主线、异常、网络

2023-09-12 08:18:05 作者:Poison★弑神

您好,我尝试使用下面的方法来检查网络连接和互联网present

  

检查=新ConnectionDetector(getApplicationContext());

     

康恩= check.isConnectingToInternet();

 公共类ConnectionDetector {

私人语境_context;

公共ConnectionDetector(上下文的背景下){
    this._context =背景;
}

/ **
 *检查所有可能的互联网服务供应商
 * ** /
/ *公共布尔isConnectingToInternet(){
    ConnectivityManager连接=(ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
      如果(连接!= NULL)
      {
          的NetworkInfo []信息= connectivity.getAllNetworkInfo();
          如果(资讯!= NULL)
              的for(int i = 0; I< info.length;我++)
                  如果(资讯[I] .getState()== NetworkInfo.State.CONNECTED)
                  {
                      返回true;
                  }

      }
      返回false;
} * /

公共布尔isConnectingToInternet(){
    尝试{
        ConnectivityManager厘米=(ConnectivityManager)_context.getSystemService
                                                    (Context.CONNECTIVITY_SERVICE);
        的NetworkInfo的NetInfo = cm.getActiveNetworkInfo();
        Log.d(NetInfo的,将String.valueOf(NetInfo中));
        如果(NetInfo的= NULL和放大器;!&安培; netInfo.isConnected())
        {
            //网络是有的,但是否我们可以从网络访问。
            网址URL =新的URL(http://www.Google.com/);
            HttpURLConnection的urlc =(HttpURLConnection类)url.openConnection();
            urlc.setRequestProperty(连接,关闭);
            urlc.setConnectTimeout(2000); //超时2秒。
            urlc.connect();
            Log.d(NetInfo的响应code,将String.valueOf(urlc.getResponse code()));
           // Toast.makeText(getApplicationContext(),将String.valueOf(urlc.getResponse code()),Toast.LENGTH_LONG).show();
            如果(urlc.getResponse code()== 200)//成功响应。
            {
                返回true;
            }
            其他
            {
                 Log.d(没有网络,没有互联网);
                返回false;
            }
        }
    }
    赶上(例外五)
    {
        e.printStackTrace();
    }
    返回false;
}
 

}

请注意:

但是,这将返回NetworkOnMainThread异常喜欢follows.kindly任何一个建议我,我做什么错误......

  12月三号至27号:53:35.617:W / System.err的(1095):android.os.NetworkOnMainThreadException
十二月三号日至27日:53:35.627:W / System.err的(1095):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
十二月三号日至27日:53:35.637:W / System.err的(1095):在java.net.InetAddress.lookupHostByName(InetAddress.java:391)
十二月三号日至27日:53:35.637:W / System.err的(1095):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
十二月三号日至27日:53:35.647:W / System.err的(1095):在java.net.InetAddress.getAllByName(InetAddress.java:220)
十二月三号日至27日:53:35.647:W / System.err的(1095):在libcore.net.http.HttpConnection< INIT>(HttpConnection.java:71)
十二月三号日至27日:53:35.657:W / System.err的(1095):在libcore.net.http.HttpConnection< INIT>(HttpConnection.java:50)
十二月三号日至27日:53:35.668:W / System.err的(1095):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:351)
十二月三号日至27日:53:35.668:W / System.err的(1095):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
十二月三号日至27日:53:35.677:W / System.err的(1095):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
十二月三号日至27日:53:35.687:W / System.err的(1095):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
十二月三号日至27日:53:35.699:W / System.err的(1095):在libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
十二月三号日至27日:53:35.699:W / System.err的(1095):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
十二月三号日至27日:53:35.707:W / System.err的(1095):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
十二月三号日至27日:53:35.718:W / System.err的(1095):在libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
十二月三号日至27日:53:35.727:W / System.err的(1095):在com.slet.routemytrips.beta.ConnectionDetector.isConnectingToInternet(ConnectionDetector.java:50)
十二月三号日至27日:53:35.727:W / System.err的(1095):在com.slet.routemytrips.beta.Disclaimer $ 1.onClick(Disclaimer.java:178)
十二月三号日至27日:53:35.738:W / System.err的(1095):在android.view.View.performClick(View.java:3480)
十二月三号日至27日:53:35.738:W / System.err的(1095):在android.view.View $ PerformClick.run(View.java:13983)
十二月三号日至27日:53:35.748:W / System.err的(1095):在android.os.Handler.handleCallback(Handler.java:605)
十二月三号日至27日:53:35.757:W / System.err的(1095):在android.os.Handler.dispatchMessage(Handler.java:92)
十二月三号日至27日:53:35.757:W / System.err的(1095):在android.os.Looper.loop(Looper.java:137)
十二月三号日至27日:53:35.767:W / System.err的(1095):在android.app.ActivityThread.main(ActivityThread.java:4340)
十二月三号日至27日:53:35.777:W / System.err的(1095):在java.lang.reflect.Method.invokeNative(本机方法)
十二月三号日至27日:53:35.777:W / System.err的(1095):在java.lang.reflect.Method.invoke(Method.java:511)
十二月三号日至27日:53:35.787:W / System.err的(1095):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
十二月三号日至27日:53:35.797:W / System.err的(1095):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
十二月三号日至27日:53:35.807:W / System.err的(1095):在dalvik.system.NativeStart.main(本机方法)
十二月三号日至27日:57:05.237:D / dalvikvm(90):GC_CONCURRENT释放666K,免费10%12624K / 14023K,暂停为6ms + 10ms的
 
异常 线程

解决方案

您不能使主线程上的HTTP请求,这将导致UI冻结起来。所以它会抛出该异常。你需要做的是在AsyncTask的或其他主题。

Hi, I try to check network connectivity and Internet present by using following method

check = new ConnectionDetector(getApplicationContext());

conn = check.isConnectingToInternet();

public class ConnectionDetector {

private Context _context;

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

/**
 * Checking for all possible internet providers
 * **/
/*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;
}*/

public boolean isConnectingToInternet(){
    try{
        ConnectivityManager cm = (ConnectivityManager)_context.getSystemService
                                                    (Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        Log.d("NetInfo", String.valueOf(netInfo));
        if (netInfo != null && netInfo.isConnected())
        {
            //Network is available but check if we can get access from the network.
            URL url = new URL("http://www.Google.com/");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(2000); // Timeout 2 seconds.
            urlc.connect();
            Log.d("NetInfo Response Code", String.valueOf(urlc.getResponseCode()));
           // Toast.makeText(getApplicationContext(), String.valueOf(urlc.getResponseCode()), Toast.LENGTH_LONG).show();
            if (urlc.getResponseCode() == 200)  //Successful response.
            {
                return true;
            } 
            else 
            {
                 Log.d("NO INTERNET", "NO INTERNET");
                return false;
            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return false;
}

}

Note :

But this will return NetworkOnMainThread Exception like follows.kindly any one suggest me what mistakes i made.......

03-27 12:53:35.617: W/System.err(1095): android.os.NetworkOnMainThreadException
03-27 12:53:35.627: W/System.err(1095):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
03-27 12:53:35.637: W/System.err(1095):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
03-27 12:53:35.637: W/System.err(1095):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
03-27 12:53:35.647: W/System.err(1095):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
03-27 12:53:35.647: W/System.err(1095):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
03-27 12:53:35.657: W/System.err(1095):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
03-27 12:53:35.668: W/System.err(1095):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
03-27 12:53:35.668: W/System.err(1095):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
03-27 12:53:35.677: W/System.err(1095):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
03-27 12:53:35.687: W/System.err(1095):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-27 12:53:35.699: W/System.err(1095):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
03-27 12:53:35.699: W/System.err(1095):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-27 12:53:35.707: W/System.err(1095):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-27 12:53:35.718: W/System.err(1095):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
03-27 12:53:35.727: W/System.err(1095):     at com.slet.routemytrips.beta.ConnectionDetector.isConnectingToInternet(ConnectionDetector.java:50)
03-27 12:53:35.727: W/System.err(1095):     at com.slet.routemytrips.beta.Disclaimer$1.onClick(Disclaimer.java:178)
03-27 12:53:35.738: W/System.err(1095):     at android.view.View.performClick(View.java:3480)
03-27 12:53:35.738: W/System.err(1095):     at android.view.View$PerformClick.run(View.java:13983)
03-27 12:53:35.748: W/System.err(1095):     at android.os.Handler.handleCallback(Handler.java:605)
03-27 12:53:35.757: W/System.err(1095):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-27 12:53:35.757: W/System.err(1095):     at android.os.Looper.loop(Looper.java:137)
03-27 12:53:35.767: W/System.err(1095):     at android.app.ActivityThread.main(ActivityThread.java:4340)
03-27 12:53:35.777: W/System.err(1095):     at java.lang.reflect.Method.invokeNative(Native Method)
03-27 12:53:35.777: W/System.err(1095):     at java.lang.reflect.Method.invoke(Method.java:511)
03-27 12:53:35.787: W/System.err(1095):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-27 12:53:35.797: W/System.err(1095):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-27 12:53:35.807: W/System.err(1095):     at dalvik.system.NativeStart.main(Native Method)
03-27 12:57:05.237: D/dalvikvm(90): GC_CONCURRENT freed 666K, 10% free 12624K/14023K, paused 6ms+10ms

解决方案

You can't make HTTP requests on the main thread, it would cause the UI to freeze up. So it throws that exception. You need to do it in an AsyncTask or another Thread.