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.
- HttpURLConnection para enviar archivos de imagen, audio y video con el parámetro puede (String o Json String) Android
- HttpUrlConnection carga de archivo multipart con ProgressBar
- GetHttpResponseCode () devuelve -1 en android 2.2
- Android FileNotFound Exception - No se puede getInputStream desde la URL de la imagen que no tiene formato de archivo
- Cadena de resultados de Android HttpUrlConnection truncada
- Digest autenticación en Android mediante HttpURLConnection
- Android http keepalive solución, pero es permanente?
- Cómo deshabilitar la búsqueda de WWW-Authenticate encabezado en 401 en HttpUrlConnection en Android?
- Necesita un ejemplo de HttpResponseCache en Android
- Android HttpURLConnection PUT a Amazon AWS S3 403 error
- Cómo manejar las cookies en httpUrlConnection usando cookieManager
- Envío de una solicitud JSON HTTP POST desde Android
- Cómo agregar parámetros a HttpURLConnection mediante POST
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
llamandodisconnect
. Esto se puede hacer desde suActivity
usando elandroid handler
; Si utilizaAsyncTask
, puede llamar simplementecancel
oThread.interrupt()
:new Handler().postDelayed(new Runnable() { public void run() { httpUrlConnTask.cancel(true); } }, timeout * 1000);
Y en su
httpUrlConnTask
, la llamadadisconnect
: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 deisCancelled
paraisCancelled
. Y untry..catch
para que pueda cerrar todos los arroyos correctamente. -
Ya tiene
keepAlive
false yreadTimeout
, considere agregarconnection 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"); } }
- EdgeEffect en AppBarLayout
- Texto negro sobre fondo oscuro en turrón (android.R.layout.simple_spinner_item)