Możesz ustawić limity czasu dla bazowego klienta HTTP. Jeśli nie określisz klienta, Retrofit utworzy go z domyślnymi limitami czasu połączenia i odczytu. Aby ustawić własne limity czasu, musisz skonfigurować własnego klienta i dostarczyć go doRestAdapter.Builder
.
Opcją jest użycie klienta OkHttp , również z Square.
1. Dodaj zależność biblioteki
W build.gradle dołącz ten wiersz:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Gdzie x.x.x
jest żądana wersja biblioteki.
2. Ustaw klienta
Na przykład, jeśli chcesz ustawić limit czasu na 60 sekund, zrób tak w przypadku Retrofit przed wersją 2 i Okhttp przed wersją 3 ( W WERSJACH WERSJI, ZOBACZ EDYCJE ):
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();
}
EDYCJA 1
W przypadku wersji okhttp 3.x.x
musisz ustawić zależność w ten sposób:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
I ustaw klienta za pomocą wzorca konstruktora:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Więcej informacji w Limit czasu
EDYCJA 2
Wersje doposażane, ponieważ 2.x.x
również używają wzorca konstruktora, więc zmień powyższy blok powrotu na:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Jeśli używasz kodu takiego jak moja providesRestAdapter
metoda, zmień typ zwracanej metody na Retrofit .
Więcej informacji w Retrofit 2 - Podręcznik aktualizacji z wersji 1.9
ps: jeśli twoja minSdkVersion jest większa niż 8, możesz użyć TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Aby uzyskać więcej informacji na temat jednostek, zobacz TimeUnit .
public Gson providesGson() { return new GsonBuilder().create(); }
. Więc to zrobić:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Gdzie moduł jest instancją odpowiedniej klasy, która ma wszystkie te metodycompile 'com.squareup.okhttp3:okhttp:3.x.x'
importu stopni, jak w poniższej odpowiedzi TeoTe odpowiedzi były dla mnie nieaktualne, więc oto jak się udało.
Dodaj OkHttp, w moim przypadku wersja to
3.3.1
:Następnie przed zbudowaniem modernizacji wykonaj następujące czynności:
źródło
źródło
Używam Retrofit 1.9, aby uzyskać XML .
Jeśli używasz Retrofit 1.9.0 i okhttp 2.6.0, dodaj do pliku Gradle.
Uwaga: jeśli chcesz pobrać JSON , po prostu usuń powyższy kod.
źródło
Dla Retrofit1.9 z użytkownikami OkHttp3, oto rozwiązanie,
źródło
źródło
To będzie najlepszy sposób, aby ustawić limit czasu dla każdej usługi (przekroczenie limitu czasu jako parametr)
I nie przegap tego dla OkHttpClient.
Mam nadzieję, że to pomoże każdemu.
źródło
Znalazłem ten przykład
https://github.com/square/retrofit/issues/1557
Tutaj ustawiamy niestandardowego klienta połączenia klienta adresu URL przed zbudowaniem implementacji usługi spoczynkowej interfejsu API.
źródło
źródło