我希望此方法在执行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;
}
答案 0 :(得分:0)
需要将同步(任务)放在wait()周围。但是,我相信您可能会缺少对wait()的理解。 wait()是等待另一个线程触发notify()事件。
通过尝试等待主线程,您正在阻塞主线程。如果可以阻止,最好从代码中删除AsyncTask。否则需要在方法中提供一个回调参数(而不是返回结果)。该方法将如下所示:
public void postWithoutTokenXMLAsync(String url,Consumer callback)引发IOException {...
使用代码通过AsyncTask中的callback.accept(response)返回结果