public void sendGET(String GET_URL) throws IOException {
try {
URL obj = new URL(GET_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
int responseCode = con.getResponseCode();
}
catch (IOException e) {
e.printStackTrace();
}
}这是我为get请求编写的方法。在我的例子中,GET_URL是一个字符串,它的值是GET_URL=192.168.4.1?value=1。我在点击按钮时调用了这个方法,但是它在android中不工作,而在java中,它工作得很完美。注意:我的apk编译时没有任何错误,而且它也在运行,但是get请求不起作用。按钮代码如下,
led1on.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
sendGET("http://192.168.4.1/?linker=1");
Toast.makeText(getApplicationContext(),
"Led1 ON Clicked!", Toast.LENGTH_SHORT).show();
}
catch (IOException e){
}
}
});崩溃日志在这里: 07-29 16:10:07.352 3459-3459/com.example.samiullah.esp 8266 E/AndroidRuntime:致命异常:主要进程: com.example.samiullah.esp8266,PID: 3459 android.os.NetworkOnMainThreadException at android.os.NetworkOnMainThreadException在libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) at libcore.io.IoBridge.connectErrno(IoBridge.java:137)在libcore.io.IoBridge.connect(IoBridge.java:122) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452) at java.net.Socket.connect(Socket.java:884).android.okhttp.internal.Platform.connectSocket(Platform.java:117) at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160)在com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67) at com.android.okhttp.Connection.connect(Connection.java:152)在com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185) at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)在com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)在com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)在com.example.samiullah.esp8266.MainActivity.sendGET(MainActivity.java:110) at com.example.samiullah.esp8266.MainActivity$1.onClick(MainActivity.java:29)在android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147)在android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(原生方法)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 07-29 :10:09.956 3459-3459/com.example.samiullah.esp 8266 I/Process:发送信号。PID: 3459 SIG: 9
发布于 2018-07-29 10:48:22
在您的AndroidMenifest.xml中,添加
<uses-permission android:name="android.permission.INTERNET" />我看到了你的日志,对于那些不熟悉android的人来说,这是一个常见的问题。试一试
new Thread(() -> sendGET("http://192.168.4.1/?linker=1")).start();这不是一个好办法,但它可以解决你的问题。看一下How do I fix android.os.NetworkOnMainThreadException?
发布于 2018-07-29 10:17:59
我觉得这是个有趣的错误..。
服务器在哪个端口上监听?您应该在请求url中指定服务器端口,如http://192.168.4.1:8080/?linker=1。
发布于 2018-07-29 11:26:32
您必须先连接同一个网络,然后尝试获取数据。或者尝试其他API链接。例如:https://jsonplaceholder.typicode.com/photos/1
https://stackoverflow.com/questions/51578979
复制相似问题