Sie können Timeouts für den zugrunde liegenden HTTP-Client festlegen. Wenn Sie keinen Client angeben, erstellt Retrofit einen mit Standard-Verbindungs- und Zeitüberschreitungen. Um eigene Timeouts festzulegen, müssen Sie Ihren eigenen Client konfigurieren und an die RestAdapter.Builder
senden.
Eine Option ist die Verwendung des OkHttp Clients, auch von Square.
1. Fügen Sie die Bibliothek Abhängigkeit
Im build.gradle, umfassen diese Zeile:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Wo x.x.x
die gewünschte Version der Bibliothek ist.
2. Stellen Sie den Client
Zum Beispiel, wenn Sie ein Timeout von 60 Sekunden einzustellen, gehen Sie auf diese Weise für Retrofit vor der Version 2 und Okhttp vor Version 3 (FüR ältere Versionen SEE, die Änderungen):
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
Für okhttp Versionen seit 3.x.x
haben Sie die Abhängigkeit auf diese Weise eingestellt werden:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
und der Client stellen Sie die Erbauer mit:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Mehr Informationen in Timeouts
EDIT 2
Retrofit-Versionen seit 2.x.x
verwendet auch die Erbauer, so die Rückkehr Block oben auf das ändern:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Wenn ein Code wie meine providesRestAdapter
Methode verwenden, dann die Methode Rückkehr ändern Typ Retrofit .
Mehr Infos in Retrofit 2 — Upgrade Guide from 1.9
ps: Wenn Ihr minSdkVersion größer als 8 ist, können Sie TimeUnit.MINUTES
verwenden:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Weitere Informationen zu den Einheiten finden TimeUnit.
Ich sehe SetReadTimeout in der neuen Version von okhttp, keine neuen Möglichkeiten, dies zu tun? – Lion789
@ Lion789 sehen Sie die bearbeitete Frage. – androidevil
Ich benutze okhttp3, und für mich habe ich diesen Code verwendet: new okhttp3.OkHttpClient(). NewBuilder(); okHttpClient.readTimeout (60, TimeUnit.SECONDS); okHttpClient.writeTimeout (60, TimeUnit.SECONDS); okHttpClient.connectTimeout (60, TimeUnit.SECONDS); neue Retrofit.Builder() .client (okHttpClient.build()) – lucasddaniel