增加调用 RoboSpice 服务的 loadDataFromNetwork() 的时间

Increase time of invoking loadDataFromNetwork() of RoboSpice service

我将 RoboSpice 与 OkHttpClient 模块 (OkHttpSpiceService) 一起用于相当长时间的请求。为此,我需要增加 http 客户端的超时时间,所以我将它们设置为 120 秒。

    @Override
    protected OkHttpClient createOkHttpClient() {
            OkHttpClient okHttpClient = super.createOkHttpClient();
            okHttpClient.setConnectTimeout(120, TimeUnit.SECONDS);
            okHttpClient.setReadTimeout(120, TimeUnit.SECONDS);
            okHttpClient.setWriteTimeout(120, TimeUnit.SECONDS);
            return okHttpClient;
}

我不使用缓存选项所以我通过

调用SpiceRequest
getSpiceManager().execute(spiceRequest, this);

此 SpiceService 调用后 loadDataFromNetwork() 每 30 秒(3 次)当没有响应或在短时间内无法访问时。

是否有可能增加或更改调用loadDataFromNetwork()的时间?我知道我会在一分钟后得到回复,但使用这种方法我无法获得正确的回复。

默认情况下,RoboSpice 使用这样的 DefaultRetryPolicy:

/** The default number of retry attempts.*/    
public static final int DEFAULT_RETRY_COUNT = 3;

/** The default delay before retry a request (in ms). */
public static final long DEFAULT_DELAY_BEFORE_RETRY = 2500;

您可以做的是通过扩展 DefaultRetryPolicy class 并重写这两个方法来实现您自己的重试策略:

public class CustomRetryPolicy extends DefaultRetryPolicy {
    @Override
    public int getRetryCount() { return 1; }

    @Override
    public long getDelayBeforeRetry() { return 120L * 1000; }
}

您可以像这样使用自定义重试策略:

spiceRequest.setRetryPolicy(new CustomRetryPolicy());

看看这里: https://github.com/stephanenicolas/robospice/wiki/Advanced-RoboSpice-Usages-and-FAQ#how-can-i-setup-a-retry-policy-for-failed-requests-

I do not use caching option so I call SpiceRequest by getSpiceManager().execute(spiceRequest, this);

顺便说一句,这不会阻止 RoboSpice 使用缓存。要真正阻止 SpiceService 使用缓存,您需要在自己的 OkHttpSpiceService 实现中覆盖 createCacheManager 方法,如下所示:

public class MyOkHttpSpiceService extends OkHttpSpiceService {

@Override
public CacheManager createCacheManager(Application application) {
    // Just return an empty CacheManager
    return new CacheManager() {
        @Override
        public <T> T saveDataToCacheAndReturnData(T data, Object cacheKey) throws CacheSavingException, CacheCreationException {
            return data;
        }
    };
}

}

av_lee提供的答案是正确的,但是为RoboSpice定义自定义重试策略的方法不正确。上面提到的代码将导致在失败的情况下无限重试调用。 RoboSpice 将始终使用 getRetryCount() 返回的值,并在重试后将其递减,但下次它将再次获得值 1,依此类推。 实现自定义重试策略的正确方法是设置 DefaultRetryPolicy 的值 class.

public class CustomRetryPolicy extends DefaultRetryPolicy {
  public CustomRetryPolicy(int retryCount) {
      super(retryCount, DEFAULT_DELAY_BEFORE_RETRY, DEFAULT_BACKOFF_MULT);
  } 
}

在上面的代码中,retryCount 是您希望为您的请求重试的次数,以及使用重试和退避乘数之前延迟的默认值。您可以为这三个中的任何一个使用您的首选值。