gpt4 book ai didi

java - 使用 Square 的 Retrofit Client,是否可以取消正在进行的请求?如果有怎么办?

转载 作者:IT王子 更新时间:2023-10-28 23:36:06 27 4
gpt4 key购买 nike

我正在使用 Square 的 Retrofit Client 从 Android 应用发出短暂的 json 请求。有没有办法取消请求?如果有,怎么做?

最佳答案

要取消异步改造请求,可以通过关闭ExecutorService来实现执行异步请求。

例如,我有这段代码来构建 RestAdapter:

Builder restAdapter = new RestAdapter.Builder();
restAdapter.setEndpoint(BASE_URL);
restAdapter.setClient(okClient);
restAdapter.setErrorHandler(mErrorHandler);
mExecutorService = Executors.newCachedThreadPool();
restAdapter.setExecutors(mExecutor, new MainThreadExecutor());
restAdapter.setConverter(new GsonConverter(gb.create()));

并有这种方法来强制放弃请求:

public void stopAll(){
List<Runnable> pendingAndOngoing = mExecutorService.shutdownNow();
// probably await for termination.
}

或者,您可以使用 ExecutorCompletionServicepoll(timeout, TimeUnit.MILISECONDS)take() 所有正在进行的任务。这将防止线程池不被关闭,就像 shutdownNow() 一样,因此您可以重用您的 ExecutorService

希望对某人有所帮助。

编辑:从 OkHttp 2 RC1 开始changelog执行 .cancel(Object tag) 是可能的。我们应该期待即将到来的 Retrofit 具有相同的功能:

您可以使用实际的 Request 对象来取消它

okClient.cancel(request);

或者如果你已经为 Request.Builder 提供了标签,你必须使用

okClient.cancel(request.tag());

所有正在进行的、执行的或未决的请求都在 DispatcherokClient.getDispatcher() 中排队。您也可以在此对象上调用取消方法。如果已经建立,Cancel 方法将通知 OkHttp Engine 终止与主机的连接。

Edit 2:Retrofit 2 具有完整的取消请求功能。

关于java - 使用 Square 的 Retrofit Client,是否可以取消正在进行的请求?如果有怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com