繁体   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