当retrofit.client.UrlConnectionClient用作客户端时,如何在改造中取消正在进行的请求?

时间:2015-05-27 10:27:16

标签: android retrofit

在构建适配器时,我正在使用我的Android应用程序中的http调用和retrofit.client.UrlConnectionClient作为客户端进行改造。

RestAdapter.Builder builder = new RestAdapter.Builder()
            .setEndpoint(url)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setClient(
                    new Client.Provider() {
                        public Client get() {
                            return new UrlConnectionClient() {
                                @Override
                                protected HttpURLConnection openConnection(Request request)
                                        throws IOException {
                                    HttpURLConnection connection = super.openConnection(request);
                                    connection.setConnectTimeout(connectionTimeout);
                                    return connection;
                                }

我想设置超时,所以我使用了UrlConnectionClient作为我的客户端。我找不到像OkHttp这样的其他客户的方式。

问题是:如何取消正在进行的请求?。

我看过类似的帖子@ Using Square's Retrofit Client, is it possible to cancel an in progress request? If so how?但是如果我尝试添加自己的执行程序并尝试使用它来取消请求,我的代码会变得非常复杂。我正在研究现有代码是否有更好的方法。

我也看到Retorofit V2.0计划重试和取消,但不确定何时会发布.. https://github.com/square/retrofit/issues/297

需要帮助! 实际上我还需要一种方法来重试相同的代码。

1 个答案:

答案 0 :(得分:3)

自2.0.0-beta2(https://github.com/square/retrofit/releases/tag/parent-2.0.0-beta2)开始提供此功能。我不知道是否有一个文档解释了这一点,但这里是API的链接:
http://square.github.io/retrofit/2.x/retrofit/retrofit/Call.html#cancel--

'Call'API允许通过'克隆'请求来进行重试。