Piszę aplikację, która łączy się z serwisem internetowym i nie chcę, aby zbyt długo czekać, jeśli nie może uzyskać połączenia. Dlatego ustawiam connectionTimeout na httpparams. Ale wydaje się, że nie ma to żadnego wpływu.Limit czasu połączenia HTTP w systemie Android nie działa
Aby przetestować tymczasowo włączam swoją sieć WLAN. Aplikacja próbuje nawiązać połączenie przez dłuższy czas (czyli dłużej niż przez 3 sekundy), a następnie generuje wyjątek UnknownHostException.
Oto mój kod:
try{
HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000);
httppost = new HttpPost(URL);
StringEntity se = new StringEntity(envelope,HTTP.UTF_8);
httppost.setEntity(se);
//Code stops here until UnknownHostException is thrown.
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);
HttpEntity entity = httpResponse.getEntity();
return entity;
}catch (Exception e){
e.printStackTrace();
}
Ktoś ma jakieś pomysły co brakowało mi?
W jaki sposób system jest powiadamiany o przekroczeniu limitu czasu i jaki wyjątek należy zastosować? – vokilam
@VokilaM: Właśnie zredagowałem swoją odpowiedź. – Cristian
Po ponad 30 sekundach nadal otrzymuję wyjątek UnknownHostException. W tym przypadku urządzenie jest podłączone do routera Wi-Fi, ale nie ma dostępu do Internetu. Jakąkolwiek wskazówkę, jak sprawić, aby to połączenie było zgodne z tym? W przeciwnym razie mógłbym wrócić do zewnętrznego timera ... :( – hooby3dfx