的URLConnection:无法使GET请求
问题描述:
我试图使用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)
答
你将不得不使用线程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();
}
答
它似乎与许多话题重复。就在研究之前创建的问题
你可以看到答案这里:当应用程序试图在其主线程进行联网操作 How to fix android.os.NetworkOnMainThreadException?
,抛出此异常。在AsyncTask中运行您的代码
请更好地格式化您的问题。 –
异常显示您在主线程中使用网络。试试这个[NetworkOnMainThreadException链接](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – NamNH
可能重复的[Android http connection exception](http://stackoverflow.com/questions/6976317/android- HTTP连接的异常) –