В моем приложении для Android есть http-сообщения для таких URL-адресов, как http://example.com/abc.php?email=abc@xyz.com Итак, приложение Android в основном говорит с PHP на стороне сервера и получает ответы JSON и анализирует их для заполнения различных просмотров в приложении. Работает отлично.
Мой вопрос: как я должен обрабатывать события, приведенные ниже в Android-приложении, чтобы в случае, если эти события происходят в приложении на стороне сервера, приложение не должно FORCE CLOSE, как сейчас.
Время ожидания сервера и ответ не получен. Сила приложения закрывается. Я хочу с этим справиться.
Коды ошибок, возвращаемые в ответ на сообщение 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-запросы в потоке пользовательского интерфейса.