[英]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.