簡體   English   中英

Retrofit:如何等待響應

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM