[英]Retrofit: How to wait for response
我有 AsyncTask 和 doInBackground 方法,我使用 Retrofit 发送 POST 请求。我的代码如下所示:
//method of AsyncTask
protected Boolean doInBackground(Void... params) {
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(Constants.ROOT_API_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
IConstructSecureAPI service = restAdapter.create(IConstructSecureAPI.class);
//request
Call<JsonElement> result = service.getToken("TestUser", "pass", "password");
result.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
}
});
return true;
}
问题是:Retrofit 异步发送请求,同时 doInBackground 方法返回值。 所以我需要在同一个线程中发送一个请求,并按顺序执行所有操作。 逐个。 并且在请求完成后从 doInBackground 返回。 如何使用 Retrofit 在同一线程中发送请求?
Call
类有一个execute()
方法,可以同步调用。
enqueue()
明确用于进行异步调用。
正如@Tanis.7x 提到的“异步改造发送请求”, enqueue() 正在执行异步操作,那么放入 AsyncTask 的原因是什么? (异步中的异步?)
您可以简单地从 AsyncTask 中取出所有改造代码,而onResponse
是等待您的请求调用返回的回调,因此您可以在此回调中执行任何 UI 更新。
使用 retrofit execute
方法而不是enqueue
方法。
因为在 asynctask doInbackground
方法中已经创建了一个线程来在后台执行代码。 无需使用 retrofit enqueue
再次创建它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.