Как я должен обрабатывать таймауты сервера и ответы на код ошибки на http-сообщение в приложении Android?

В моем приложении для Android есть http-сообщения для таких URL-адресов, как http://example.com/abc.php?email=abc@xyz.com Итак, приложение Android в основном говорит с PHP на стороне сервера и получает ответы JSON и анализирует их для заполнения различных просмотров в приложении. Работает отлично.

Мой вопрос: как я должен обрабатывать события, приведенные ниже в Android-приложении, чтобы в случае, если эти события происходят в приложении на стороне сервера, приложение не должно FORCE CLOSE, как сейчас.

  1. Время ожидания сервера и ответ не получен. Сила приложения закрывается. Я хочу с этим справиться.

  2. Коды ошибок, возвращаемые в ответ на сообщение HTTP-приложения на сервер. App App закрывается в настоящее время, так как я не справился с этим.

Я столкнулся с этими двумя сценариями, где приложение не закодировано для обработки этих событий. Не стесняйтесь добавлять любые другие события, которые могут произойти, которые могут привести к появлению ANR в приложении Android.

Небольшой фрагмент кода или подсказка мне очень помогут, поскольку я никогда раньше этого не делал.

Благодарю.

Добавляя к очень хорошим предложениям до сих пор …

Мой помощник по работе научил меня использовать классы из пакета org.apache.http следующим образом:

String result = null; HttpGet request = new HttpGet(some_uri); // As Jeff Sharkey does in the android-sky example, // use request.setHeader to optionally set the User-Agent header. HttpParams httpParams = new BasicHttpParams(); int some_reasonable_timeout = (int) (30 * DateUtils.SECOND_IN_MILLIS); HttpConnectionParams.setConnectionTimeout(httpParams, some_reasonable_timeout); HttpConnectionParams.setSoTimeout(httpParams, some_reasonable_timeout); HttpClient client = new DefaultHttpClient(httpParams); try { HttpResponse response = client.execute(request); StatusLine status = response.getStatusLine(); if (status.getStatusCode() == HttpStatus.SC_OK) { ResponseHandler<String> responseHandler = new BasicResponseHandler(); result = responseHandler.handleResponse(response); } else { // Do something else, if wanted. } } catch (ClientProtocolException e) { Log.e(LOG_TAG, "HTTP Error", e); // Do something else, if wanted. } catch (IOException e) { Log.e(LOG_TAG, "Connection Error", e); // Do something else, if wanted. } finally { client.getConnectionManager().shutdown(); } // Further parse result, which may well be JSON. 

Как сказал Кай в комментарии, одним из вариантов является исключение и, возможно, повторное сообщение или сообщение об ошибке.

Для кодов ответов! = 200, просто прочитайте их, выполните свою работу внутри блока if (con.getResponseCode() == 200)

Другой альтернативный вариант – использовать гораздо более приятные классы Apache:

http://developer.android.com/reference/org/apache/http/package-summary.html

Для фрагмента, проверьте руководство BalusC здесь в SO: Использование java.net.URLConnection для запуска и обработки HTTP-запросов

Вы также должны убедиться, что не выполняете длительные задачи, такие как HTTP-запросы в потоке пользовательского интерфейса.