Você pode definir tempos limite no cliente HTTP subjacente. Se você não especificar um cliente, o Retrofit criará um com tempos limite de conexão e leitura padrão. Para definir seus próprios tempos limite, você precisa configurar seu próprio cliente e fornecê-lo ao RestAdapter.Builder
.
Uma opção é usar o cliente OkHttp , também da Square.
1. Adicione a dependência da biblioteca
No build.gradle, inclua esta linha:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Onde x.x.x
está a versão da biblioteca desejada.
2. Defina o cliente
Por exemplo, se você deseja definir um tempo limite de 60 segundos, faça o seguinte para Retrofit antes da versão 2 e Okhttp antes da versão 3 ( PARA AS VERSÕES MAIS NOVAS, VEJA AS EDITAS ):
public RestAdapter providesRestAdapter(Gson gson) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.build();
}
EDIT 1
Para versões okhttp desde então 3.x.x
, é necessário definir a dependência da seguinte maneira:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
E configure o cliente usando o padrão do construtor:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Mais informações em Timeouts
EDIT 2
Versões de atualização, uma vez que 2.x.x
também usa o padrão do construtor, altere o bloco de retorno acima para este:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Se estiver usando um código como o meu providesRestAdapter
método, altere o tipo de retorno do método para Retrofit .
Mais informações no Retrofit 2 - Upgrade Guide from 1.9
ps: Se sua minSdkVersion for maior que 8, você poderá usar TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Para mais detalhes sobre as unidades, consulte TimeUnit .