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

 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(); } } } 

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 para POST y PUT .
  • setDoInput(true) se utiliza para la solicitud GET .

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

  • URLConnection getContentLength () devuelve un valor negativo
  • Cómo obtener cookies en HttpUrlConnection usando CookieStore?
  • Java.io.IOException: No se han encontrado problemas de autenticación
  • Cómo manejar las cookies en httpUrlConnection usando cookieManager
  • ¿Cuál es la diferencia entre httpconnection en J2ME y HttpUrlConnection en Android (error HTTP 401)
  • ¿Longitud máxima del contenido?
  • HttpUrlConnection getOutputStream lanza IOException
  • Problema de corrupción de bases de datos precargado en la aplicación de Android
  • Android HTTPUrlConnection: cómo establecer los datos de la entrada en el cuerpo de http?
  • HttpURLConnection falla en Android
  • Android http keepalive solución, pero es permanente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.