È possibile impostare i timeout sul client HTTP sottostante. Se non si specifica un client, Retrofit ne creerà uno con timeout di connessione e lettura predefiniti. Per impostare i propri timeout, è necessario configurare il proprio client e fornirlo al RestAdapter.Builder
.
Un'opzione è utilizzare il client OkHttp , anche da Square.
1. Aggiungi la dipendenza dalla libreria
In build.gradle, includere questa riga:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Dov'è x.x.x
la versione della libreria desiderata.
2. Impostare il client
Ad esempio, se si desidera impostare un timeout di 60 secondi, procedere in questo modo per Retrofit prima della versione 2 e Okhttp prima della versione 3 ( PER LE VERSIONI PIÙ RECENTI, VEDERE LE MODIFICHE ):
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();
}
MODIFICA 1
Per le versioni okhttp da allora 3.x.x
, devi impostare la dipendenza in questo modo:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
E imposta il client usando il modello builder:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Maggiori informazioni in Timeout
MODIFICA 2
Le versioni di retrofit poiché 2.x.x
utilizzano anche il modello builder, quindi cambia il blocco di ritorno sopra in questo modo:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Se si utilizza un codice come il mio providesRestAdapter
metodo, modificare il tipo di ritorno del metodo in Retrofit .
Maggiori informazioni in Retrofit 2 - Guida all'aggiornamento da 1.9
ps: se minSdkVersion è maggiore di 8, puoi utilizzare TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Per maggiori dettagli sulle unità, vedere TimeUnit .