在android studio项目中,我使用okhttp发送帖子请求。
public void sentRequest(.... ....) {
RequestBody formBody = new FormBody.Builder().add("number", number).build();
Request request = new Request.Builder().url(serverBase + API_numberAvailabilityCheck).post(formBody).build();
call = client.newCall(request);
new Thread(new Runnable() {
@Override
public void run() {
final HashMap<String, Object> requestResult = new HashMap<>();
try {
final Response response = call.execute();
}
...........
...........
}
}).run();
}
但是尽管调用NetworkOnMainThreadException
,但我在调用final Response response = call.execute();
的行上却抛出了new Thread
异常。为什么会抛出异常?以及如何解决?
答案 0 :(得分:3)
错误是
thread.run()
而不是thread.start()
。
调用run()
方法可使代码在同一线程中运行,而无需启动新线程。
答案 1 :(得分:2)
您在这里犯了一个很大的错误..
new Thread(new Runnable() {
@Override
public void run() {
}
}).run();
您应该在线程上调用start()
来启动而不是run()
..如果直接调用run(),那么将没有线程在运行,并且您的Thread
会像正常情况一样运行带有常规方法run()
的Java类。
您应该使用
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
另一方面,您应该使用Retrofit ..一种更好的android联网方法。它的方法太容易使用了,它在后台也使用OkHttp
。而且您没有担心再创建线程了。