在RoboSpice请求Android中设置连接超时时间

5

我正在使用RoboSpice进行Android的Rest Api调用,我想在调用中添加30秒的连接超时,该如何实现?

以下是我的代码

 public class AddBrandsService extends
        SpringAndroidSpiceRequest<AddBrands.Response> {

     public final AddBrands.Response loadDataFromNetwork(){

     return getRestTemplate().postForObject(url,
            request, AddBrands.Response.class);
    }

    }


    this service is called here 

    private SpiceManager contentManager = new SpiceManager(
        JacksonSpringAndroidSpiceService.class);

    contentManager.execute(service, lastRequestCacheKey,
                DurationInMillis.ONE_SECOND, new AddBrandsListner());

thanks in advance...


如果您发布您的SpiceService,那么回答您会更容易些。 - rciovati
这完全取决于您使用的模块。我可以肯定地帮助使用SpringAndroid。当您更新答案时,请@Zaid Bin Tariq与我联系。 - Snicolas
1个回答

3

以下是代码。基本上,你需要注意Android版本,因为Spring Android在两种不同的实现之间切换,以避免网络堆栈中已知的错误。不幸的是,这两种实现在超时方面没有共同的接口。

private void manageTimeOuts(RestTemplate restTemplate) {
    // set timeout for requests
    ClientHttpRequestFactory factory = restTemplate.getRequestFactory();
    if (factory instanceof HttpComponentsClientHttpRequestFactory) {
        HttpComponentsClientHttpRequestFactory advancedFactory = (HttpComponentsClientHttpRequestFactory) factory;
        advancedFactory.setConnectTimeout(WEBSERVICES_TIMEOUT);
        advancedFactory.setReadTimeout(WEBSERVICES_TIMEOUT);
    } else if (factory instanceof SimpleClientHttpRequestFactory) {
        SimpleClientHttpRequestFactory advancedFactory = (SimpleClientHttpRequestFactory) factory;
        advancedFactory.setConnectTimeout(WEBSERVICES_TIMEOUT);
        advancedFactory.setReadTimeout(WEBSERVICES_TIMEOUT);
    }
}

超时时间用于设置等待传入数据的时间限制。如果在可读取数据之前读取超时过期,则可能会抛出SocketTimeoutException异常,从返回的输入流中读取数据。 - DMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接