okHttp NetworkOnMainThreadException 尽管有新线程

okHttp NetworkOnMainThreadException despite to new Thread

在 android 工作室项目中,我使用 okhttp 发送 post 请求。

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();

}

但是它在我调用 final Response response = call.execute(); 的行上抛出 NetworkOnMainThreadException 异常,尽管 new Thread。为什么它像异常一样抛出?以及如何解决这个问题?

错误是

thread.run() 而不是 thread.start().

在同一线程中调用 run() 方法代码 运行,无需启动新线程。

你在这里犯了一个大错误..

new Thread(new Runnable() {
        @Override
        public void run() {

        }
    }).run();

你应该在线程上调用 start() 来启动而不是 run() .. 如果你直接调用 运行() 那么将没有线程 运行ning 和你的Thread 将像普通 java class 一样使用普通方法 run()..

你应该使用

new Thread(new Runnable() {
    @Override
    public void run() {

    }
}).start();

附带说明 android 中更好的网络方法,您应该使用 Retrofit .. 它使用起来太容易了,而且它还在后台使用 OkHttp。 .而且你再也不用担心创建线程了..