Here is the code. Basically, you should take care of the android version as spring android switch between two different implementations in order to avoid a known error in the network stack. Unfortunately, both implementations do not have a common interface, taking into account timeouts.
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); } }
source share