Sie können Zeitüberschreitungen auf dem zugrunde liegenden HTTP-Client festlegen. Wenn Sie keinen Client angeben, erstellt Retrofit einen Client mit Standard-Timeouts für das Verbinden und Lesen. Um Ihre eigenen Zeitüberschreitungen festzulegen, müssen Sie Ihren eigenen Client konfigurieren und an den RestAdapter.Builder
.
Eine Option ist die Verwendung des OkHttp- Clients, ebenfalls von Square.
1. Fügen Sie die Bibliotheksabhängigkeit hinzu
Fügen Sie im build.gradle die folgende Zeile ein:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Wo x.x.x
ist die gewünschte Bibliotheksversion?
2. Stellen Sie den Client ein
Wenn Sie beispielsweise eine Zeitüberschreitung von 60 Sekunden festlegen möchten, gehen Sie folgendermaßen für Nachrüstung vor Version 2 und Okhttp vor Version 3 vor ( FÜR NEUERE VERSIONEN SIEHE DIE BEARBEITUNGEN ):
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();
}
BEARBEITEN 1
Für okhttp-Versionen seitdem 3.x.x
müssen Sie die Abhängigkeit folgendermaßen festlegen:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
Stellen Sie den Client anhand des Builder-Musters ein:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Weitere Infos unter Timeouts
BEARBEITEN 2
Nachrüstversionen verwenden seitdem 2.x.x
auch das Builder-Muster. Ändern Sie daher den obigen Rückgabeblock wie folgt:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Wenn Sie einen Code wie meine providesRestAdapter
Methode verwenden, ändern Sie den Rückgabetyp der Methode in Nachrüsten .
Weitere Informationen finden Sie im Retrofit 2 - Upgrade-Handbuch von 1.9
ps: Wenn Ihre minSdkVersion größer als 8 ist, können Sie Folgendes verwenden TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Weitere Informationen zu den Einheiten finden Sie unter TimeUnit .
public Gson providesGson() { return new GsonBuilder().create(); }
. Also mache ich das :Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Wobei Modul eine Instanz der richtigen Klasse ist, die alle diese Methoden hatcompile 'com.squareup.okhttp3:okhttp:3.x.x'
im Gradle-Import wie in der Antwort unten von TeoDiese Antworten waren für mich veraltet. So hat es funktioniert.
Fügen Sie OkHttp hinzu, in meinem Fall lautet die Version
3.3.1
:Führen Sie dann vor dem Erstellen Ihres Retrofits Folgendes aus:
quelle
quelle
Ich verwende Retrofit 1.9 , um ein XML zu erhalten .
Wenn Sie Retrofit 1.9.0 und okhttp 2.6.0 verwenden, fügen Sie es Ihrer Gradle-Datei hinzu.
Hinweis: Wenn Sie einen JSON abrufen müssen , entfernen Sie ihn einfach aus dem obigen Code.
quelle
Für Retrofit1.9 mit OkHttp3-Benutzern ist hier die Lösung:
quelle
quelle
Dies ist der beste Weg, um das Zeitlimit für jeden Dienst festzulegen (Zeitlimit als Parameter übergeben)
Und verpassen Sie dies nicht für OkHttpClient.
Hoffe das wird jedem helfen.
quelle
Ich habe dieses Beispiel gefunden
https://github.com/square/retrofit/issues/1557
Hier legen wir den benutzerdefinierten URL-Client-Verbindungsclient fest, bevor wir die Implementierung des API-Restdienstes erstellen.
quelle
quelle