一尘不染

我应如何处理服务器超时和对Android App中的http帖子的错误代码响应?

java

我的Android应用程序确实将http发布到诸如http://example.com/abc.php?email=abc@xyz.com
之类的URL,因此,Android应用程序基本上是与服务器端的PHP进行对话,并接收JSON响应并解析它们以填充各种内容。应用中的观看次数。工作良好。

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

  1. 服务器超时发生,并且没有收到响应。App强制现已关闭。我想适当地处理。

  2. 作为对应用程序HTTP发布到服务器的响应而返回的错误代码。由于我尚未处理,App Force目前关闭。

我遇到了这两种情况,其中应用程序未编码为处理这些事件。请随时添加可能导致ANR在Android App中发生的任何其他事件。

一点代码段或线索对我有很大帮助,因为我以前从未做过。

谢谢。


阅读 211

收藏
2020-12-03

共1个答案

一尘不染

到目前为止还添加了非常好的建议…

我的工作伙伴教我如何使用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.
2020-12-03