在wait()之前对象没有被线程锁定

时间:2019-02-28 09:01:28

标签: android android-asynctask

我希望此方法在执行AsyncTask之后返回响应,这是我的代码,这里Response是服务器响应。我使用task.wait()但出现此异常,还有其他方法吗?谢谢

 public Response postWithoutTokenXMLAsync(String url) throws IOException, InterruptedException {

    JSON = MediaType.parse( "application/json; charset=utf-8" );

    client = new OkHttpClient.Builder().build();

    RequestBody body = RequestBody.create( JSON, "" );
    request = new Request.Builder()
            .url( url )
            .post( body )
            .build();

    task = new AsyncTask <String, String, Response>() {
        @Override
        protected Response doInBackground(String... strings) {
            try {
                response = client.newCall( request ).execute();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return response;
        }

        @Override
        protected void onPostExecute(Response response) {
            super.onPostExecute( response );
        }

    };
    task.execute();

    task.wait();

    return response;
}

1 个答案:

答案 0 :(得分:0)

需要将同步(任务)放在wait()周围。但是,我相信您可能会缺少对wait()的理解。 wait()是等待另一个线程触发notify()事件。

通过尝试等待主线程,您正在阻塞主线程。如果可以阻止,最好从代码中删除AsyncTask。否则需要在方法中提供一个回调参数(而不是返回结果)。该方法将如下所示:

public void postWithoutTokenXMLAsync(String url,Consumer callback)引发IOException {...

使用代码通过AsyncTask中的callback.accept(response)返回结果