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 .
public Gson providesGson() { return new GsonBuilder().create(); }
. Então eu fazer isso:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Onde o módulo é uma instância da classe adequada, que têm todos estes métodoscompile 'com.squareup.okhttp3:okhttp:3.x.x'
na importação Gradle como na resposta abaixo por TeoEssas respostas estavam desatualizadas para mim, então aqui está como funcionou.
Adicione OkHttp, no meu caso, a versão é
3.3.1
:Antes de criar seu Retrofit, faça o seguinte:
fonte
fonte
Estou usando o Retrofit 1.9 para obter um XML .
Se você estiver usando o Retrofit 1.9.0 e o okhttp 2.6.0, adicione ao seu arquivo Gradle.
Nota: Se você precisar buscar um JSON , basta remover do código acima.
fonte
Para o Retrofit1.9 com usuários OkHttp3, aqui está a solução,
fonte
fonte
Essa será a melhor maneira de definir o tempo limite para cada serviço (passando o tempo limite como parâmetro)
E não perca isso para OkHttpClient.
Espero que isso ajude alguém.
fonte
Eu encontrei este exemplo
https://github.com/square/retrofit/issues/1557
Aqui, definimos o cliente de conexão do cliente de URL personalizado antes de criar a implementação do serviço de descanso da API.
fonte
fonte