Я пытаюсь отменить мой AsyncTask при сбое подключения к серверу. Я попытался cancel()
, но метод onPostExecute()
по-прежнему вызывается вместо onCancelled()
.
Вот что у меня внутри doInBackground()
:
protected String doInBackground(String... params) {
Log.i("ping", "doInBackground() started");
DefaultHttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);
HttpResponse response;
HttpEntity entity;
try {
HttpPost post = new HttpPost("http://192.168.1.6/ping/login.php");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", getEmail()));
nvps.add(new BasicNameValuePair("password", getPassword()));
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = client.execute(post);
entity = response.getEntity();
InputStream iStream = entity.getContent();
read(iStream);
iStream.close();
if(entity != null)
entity.consumeContent();
Log.i("ping", "doInBackground() vervolgd");
} catch (Exception e) {
e.printStackTrace();
Log.e("tvsping", "Exception: " + e.getMessage());
cancel(true);
}
return null;
}
Я пытаюсь выяснить, что происходит, когда сервер недоступен (я отключаю его, поэтому мой телефон никак не реагирует), и я получаю IOException: the connection was reset
.
Есть идеи, как мне проверить, не установлено ли соединение?
обновление
Я решил это, как предложил Танмей, с логическим значением. Но у меня есть другая проблема:
Каждый раз, когда вызывается doInBackground (), требуется около трех минут для остановки, когда он не может найти серверы. Все нормально, когда он может добраться до сервера, но я не могу получить это за 3 минуты до того, как пользователь будет уведомлен о чем-либо (я мог бы выполнить фоновый процесс, но все равно 3-минутная полоса ожидания тоже не годится)
Есть идеи, что не так с моим кодом? Это не может быть нормальным, верно?