HttpURLConnection: java.lang.IllegalStateException: Ya conectado
Estoy tratando de utilizar HttpURLClient para enviar algunos datos POST a un servidor utilizando la clase HttpRestClient
muestra a continuación. Al ejecutar
conn.setDoInput(true);
yo obtengo
- Simple HttpURLConnection archivo POST multipart / form-data de android a google blobstore
- AndroidHttpClient versus HttpUrlConnection para API Nivel 9 y superior
- ¿Por qué URLConnection tiempo de espera después de 6 + minutos en lugar de 5 segundos?
- ¿Deshabilitar la validación del certificado SSL de la conexión HTTPS?
- Error android, httpurlconnection
java.lang.IllegalStateException: Already connected
Desinstalé la aplicación y obtengo el mismo error.
En todo el ejemplo que he visto openConnection se llama antes de setDoInput
. Si, como su nombre indica, openConnection
abre una conexión, nunca debería ser utilizada antes de `setDoInput, ¿verdad? ¿Qué me estoy perdiendo?
Tal vez en algún momento se estrelló antes de ejecutar la disconnect
. ¿Podría ser esa la razón? Si es así, ¿cómo puedo desconectar la conexión antigua?
public class HttpRestClient { static public int post(String urlStr, List<NameValuePair> data){ HttpURLConnection conn = null; try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(getQuery(data)); writer.flush(); writer.close(); os.close(); InputStream is = conn.getInputStream(); String dude = readIt(is); return 1; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; } finally { if(conn!=null) conn.disconnect(); } } }
- Android: Carga de una foto en Cloudinary con devolución de llamada de progreso en HttpURLConnection
- ¿Por qué hay flujos en la API HttpURLConnection?
- Causado por: java.lang.NoSuchFieldError: com.squareup.okhttp.internal.http.HttpMethod.METHODS cuando uso retrofit
- HttpURLConnection funcionó bien en Android 2.x pero NO en 4.1: no se encontraron desafíos de autenticación
- IOException: "El desafío de autenticación recibido es nulo" (Apache Harmony / Android)
- HttpURLConnection falla en Android 4.0
- La respuesta HTTPUrlConnection de Android devuelve la basura
- Solicitud de Android POST utilizando HttpUrlConnection obtener "ya conectado"
Esto puede deberse a que los relojes se depuran en su IDE. Vea esta respuesta . Me pasó y fue difícil de descubrir.
Has llamado a conn.setDoInput(true);
Y conn.setDoOutput(true);
. Utilice uno de ellos:
-
setDoOutput(true)
se utiliza paraPOST
yPUT
. -
setDoInput(true)
se utiliza para la solicitudGET
.
La conexión que hizo fue confusa, no puede decidir qué solicitud debe utilizarse.
En su código:
static public int post(String urlStr, List<NameValuePair> data){ HttpURLConnection conn = null; System.setProperty("http.keepAlive", "false"); // must be set try { ... conn.setDoOutput(true); conn.setRequestMethod("POST"); // and connect to server, if needed conn.connect(); ... } ....
Puede ser una excepción engañosa. Vea este defecto para Jersey-2 https://java.net/jira/browse/JERSEY-2729
- ¿Cómo puedo actualizar mi ListFragment cuando vuelve al diseño de la pila trasera?
- Agregar una vista de pie de página nativa a la vista web