我应该如何处理服务器超时和错误代码响应的Android应用程序中的http文章?

我的Android应用程序不会将http发布到像http://example.com/abc.php?email=abc@xyz.com这样的URL。所以Android应用程序基本上与服务器端的PHP交谈,并接收JSON响应并parsing它们以填充各种在应用程序中的意见。 工作正常。

我的问题是,我应该如何处理Android应用程序中的事件,以防万一这些事件发生在服务器端应用程序,应用程序不应该像现在这样强制closures。

  1. 服务器超时发生,没有收到响应。 应用程序部队现在closures。 我想妥善处理。

  2. 错误代码作为对应用程序http发布到服务器的响应返回。 由于我没有处理这个,所以App Force目前closures。

我遇到了这两个应用程序没有编码来处理这些事件的情况。 请随时添加可能导致ANR出现在Android应用程序中的任何其他可能发生的事件。

一些代码片段或线索将帮助我很多,因为我从来没有这样做过。

谢谢。

Solutions Collecting From Web of "我应该如何处理服务器超时和错误代码响应的Android应用程序中的http文章?"

添加到目前为止非常好的build议…

我的工作伙伴教会我使用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. 

正如Kaj在评论中所说的,一种select是捕捉exception,并可能重试或发布失败消息。

对于响应代码!= 200,只需读取它们,在if (con.getResponseCode() == 200)

另一个select是使用更好的Apache类:

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

对于一个片段,在SO中检查BalusC的教程: 使用java.net.URLConnection来触发和处理HTTP请求

你还应该确保你没有在UI线程中做很长的任务,比如HTTP请求。