2015-11-10 35 views
-1

我试图使用URLConnection的Android应用程序访问REST风格的资源,的URLConnection:无法使GET请求

public void onClick(View v) { 

    try { 
     URL url = new URL("http://192.168.43.45:8080/entity"); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0"); 
     InputStream stream = urlConnection.getInputStream(); 
     InputStreamReader reader = new InputStreamReader(stream); 
     BufferedReader bufferedReader = new BufferedReader(reader); 
     String line ; 
     while ((line = bufferedReader.readLine()) != null) { 
      System.out.println(line); 
     } 
     bufferedReader.close(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

这是引发此错误:

11-10 07:51:33.194 17672-17672/in.co.palup.android D/AndroidRuntime: Shutting down VM 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: FATAL EXCEPTION: main 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: Process: in.co.palup.android, PID: 17672 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: android.os.NetworkOnMainThreadException 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at libcore.io.IoBridge.connect(IoBridge.java:122) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at java.net.Socket.connect(Socket.java:884) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.Connection.connect(Connection.java:152) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at in.co.palup.android.EventCreation$4.onClick(EventCreation.java:203) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.view.View.performClick(View.java:5198) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.view.View$PerformClick.run(View.java:21147) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:739) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:95) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

请更好地格式化您的问题。 –

+0

异常显示您在主线程中使用网络。试试这个[NetworkOnMainThreadException链接](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – NamNH

+1

可能重复的[Android http connection exception](http://stackoverflow.com/questions/6976317/android- HTTP连接的异常) –

回答

1

你将不得不使用线程http呼叫,如下所示,或者您可以使用Asynctask

public void onClick(View v) { 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       URL url = new URL("http://192.168.43.45:8080/entity"); 
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0"); 
       InputStream stream = urlConnection.getInputStream(); 
       InputStreamReader reader = new InputStreamReader(stream); 
       BufferedReader bufferedReader = new BufferedReader(reader); 
       String line; 
       while ((line = bufferedReader.readLine()) != null) { 
        System.out.println(line); 
       } 
       bufferedReader.close(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 

} 
1

它似乎与许多话题重复。就在研究之前创建的问题

你可以看到答案这里:当应用程序试图在其主线程进行联网操作 How to fix android.os.NetworkOnMainThreadException?

,抛出此异常。在AsyncTask中运行您的代码