Deteniendo reintentos silenciosos en HttpURLConnection

Estoy usando HttpURLConnection en Android KitKat para HttpURLConnection algunos datos a un servidor. El servidor tarda mucho tiempo en responder y la conexión se reintenta en silencio 1 a 3 veces antes de que se produzca el tiempo de espera. No quiero que vuelva a intentar, ya que el servidor actúa en todas las solicitudes, lo que resulta en cosas malas (TM).

He intentado System.setProperty("http.keepAlive", "false") antes de abrir la conexión, pero eso no ayuda.

Para las llamadas de POST establecidas

 httpURLConnection.setChunkedStreamingMode(0); 

Y esto debería arreglar los reintentos silenciosos. El informe de errores y la solución se pueden encontrar aquí .

  • Implementar un tiempo de espera duro usted mismo, y la fuerza cerrar el HttpURLConnection llamando disconnect . Esto se puede hacer desde su Activity usando el android handler ; Si utiliza AsyncTask , puede llamar simplemente cancel o Thread.interrupt() :

     new Handler().postDelayed(new Runnable() { public void run() { httpUrlConnTask.cancel(true); } }, timeout * 1000); 

    Y en su httpUrlConnTask , la llamada disconnect :

     if (isCancelled()) { urlConnection.disconnect(); return; } 

    Puede que tenga que hacer urlConnection en otro subproceso interno para que pueda hacer un bucle while en la supervisión de isCancelled para isCancelled . Y un try..catch para que pueda cerrar todos los arroyos correctamente.

  • Ya tiene keepAlive false y readTimeout , considere agregar connection timeout too . Esto establecerá el tiempo de espera del socket.

Necesita establecer System.setProperty("sun.net.http.retryPost", "false")

Clientes HTTP de Android

Antes de Froyo, HttpURLConnection tenía algunos errores frustrantes. En particular, llamar a close () en un InputStream legible podría envenenar el conjunto de conexiones . Solucione este problema deshabilitando el agrupamiento de conexiones:

 private void disableConnectionReuseIfNecessary() { // HTTP connection reuse which was buggy pre-froyo if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { System.setProperty("http.keepAlive", "false"); } } 
  • ¿Cómo puedo dividir la lógica de HttpUrlConnection en varios métodos?
  • ¿Longitud máxima del contenido?
  • Enviando cadena UTF-8 usando HttpURLConnection
  • SSLHandshakeException: Excepción de certificado utilizando HttpURLConnetion con Android 4.2.2
  • HttpURLConnection getResponseCode () deos no devuelve si no hay conexión a Internet
  • java.io.IOException: El desafío de autenticación recibido es nulo
  • Android no puede enviar solicitud GET con HttpURLConnection
  • HttpsURLConnection y conexiones intermitentes
  • HttpURLConnections persistentes en Android
  • Android HttpUrlConnection EOFException
  • Diferencia entre okhttp y httpurlconnection?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.