Utworzyłem następującą funkcję do sprawdzania stanu połączenia:
private void checkConnectionStatus() {
HttpClient httpClient = new DefaultHttpClient();
try {
String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
+ strSessionString + "/ConnectionStatus";
Log.d("phobos", "performing get " + url);
HttpGet method = new HttpGet(new URI(url));
HttpResponse response = httpClient.execute(method);
if (response != null) {
String result = getResponse(response.getEntity());
...
Kiedy zamykam serwer do testowania wykonanie długo czeka w kolejce
HttpResponse response = httpClient.execute(method);
Czy ktoś wie, jak ustawić limit czasu, aby uniknąć zbyt długiego oczekiwania?
Dzięki!
java
android
timeout
httpresponse
Niko Gamulin
źródło
źródło
Aby ustawić ustawienia na kliencie:
Użyłem tego z powodzeniem na JellyBean, ale powinien również działać na starszych platformach ....
HTH
źródło
Jeśli używasz biblioteki klienta http w Dżakarcie , możesz zrobić coś takiego:
źródło
Jeśli używasz domyślnego klienta http, oto jak to zrobić, używając domyślnych parametrów http:
Pierwotny kredyt trafia do http://www.jayway.com/2009/03/17/configuring-timeout-with-apache-httpclient-40/
źródło
Dla tych, którzy twierdzą, że odpowiedź @ kuester2000 nie działa, należy pamiętać, że żądania HTTP, najpierw spróbuj znaleźć adres IP hosta za pomocą żądania DNS, a następnie wysyła rzeczywiste żądanie HTTP do serwera, więc może być konieczne ustawienie limit czasu dla żądania DNS.
Jeśli Twój kod działał bez limitu czasu dla żądania DNS, oznacza to, że możesz uzyskać dostęp do serwera DNS lub trafiasz do pamięci podręcznej DNS systemu Android. Nawiasem mówiąc, możesz wyczyścić pamięć podręczną, ponownie uruchamiając urządzenie.
Ten kod rozszerza oryginalną odpowiedź o ręczne wyszukiwanie DNS z niestandardowym limitem czasu:
Zastosowana metoda:
Ta klasa pochodzi z tego postu na blogu . Idź i sprawdź uwagi, jeśli będziesz ich używać.
źródło
źródło
przy okazji z Httpclient-android-4.3.5 możesz utworzyć instancję HttpClient, może ona działać dobrze.
źródło
Opcją jest użycie klienta OkHttp z Square.
Dodaj zależność od biblioteki
W build.gradle dołącz ten wiersz:
Gdzie
x.x.x
jest pożądana wersja biblioteki.Ustaw klienta
Na przykład, jeśli chcesz ustawić limit czasu na 60 sekund, wykonaj następujące czynności:
ps: Jeśli twoja minSdkVersion jest większa niż 8, możesz użyć
TimeUnit.MINUTES
. Możesz więc po prostu użyć:Aby uzyskać więcej informacji na temat jednostek, zobacz TimeUnit .
źródło
Jeśli używasz
HttpURLConnection
, zadzwońsetConnectTimeout()
zgodnie z opisem tutaj :źródło
źródło