How should I handle server timeouts and error code responses to an http post in Android App?

后端 未结 3 1712
灰色年华
灰色年华 2021-02-04 18:25

My Android App does http posts to URLs like http://example.com/abc.php?email=abc@xyz.com So the Android App basically talks to PHPs on the server side and receives JSON response

相关标签:
3条回答
  • 2021-02-04 18:33

    As Kaj said in the comment, one option is to catch the exception, and perhaps retry or post a failure message.

    For response codes != 200, just read them an do your job inside an if (con.getResponseCode() == 200) block

    Another alternative option, is to use the much nicer Apache classes:

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

    For a snippet, check BalusC's tutorial here in SO: Using java.net.URLConnection to fire and handle HTTP requests

    0 讨论(0)
  • 2021-02-04 18:49

    Adding to the very good suggestions so far...

    My work associate taught me to use classes from the org.apache.http package like this:

    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.
    0 讨论(0)
  • 2021-02-04 18:52

    You should also make sure you're not doing lengthy tasks like HTTP requests in the UI thread.

    0 讨论(0)
提交回复
热议问题