Android: java.net.protocolException no admite salida

Yo estaba utilizando anteriormente HttpClient y BasicNameValuePairs , por alguna razón tengo que cambiar a HttpUrlConnection .

De ahí este código, para hacer una petición HttpPost con ciertos parámetros:

public class MConnections { static String BaseURL = "http://www.xxxxxxxxx.com"; static String charset = "UTF-8"; private static String result; private static StringBuilder sb; private static List<String> cookies = new ArrayList<String>(); public static String PostData(String url, String sa[][]) { HttpURLConnection connection = null; try { connection = (HttpURLConnection) new URL(BaseURL + url) .openConnection(); } catch (MalformedURLException e1) { } catch (IOException e1) { } cookies = connection.getHeaderFields().get("Set-Cookie"); try{ connection.setDoOutput(true); // Triggers POST. connection.setRequestProperty("Accept-Charset", charset); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset); }catch (Exception e) { //Here i get Exception that "java.lang.IllegalStateException: Already connected" } OutputStream output = null; String query = ""; int n = sa.length; for (int i = 0; i < n; i++) { try { query = query + sa[i][0] + "=" + URLEncoder.encode(sa[i][1], "UTF-8"); } catch (UnsupportedEncodingException e) { } } try { output = connection.getOutputStream(); output.write(query.getBytes(charset)); } catch (Exception e) { //Here i get Exception that "android: java.net.protocolException: Does not support output" } finally { if (output != null) try { output.close(); } catch (IOException e) { } } InputStream response = null; try { response = connection.getInputStream(); } catch (IOException e) { //Here i get Exception that "java.io.IOException: BufferedInputStream is closed" } finally { //But i am closing it here connection.disconnect(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( response, "iso-8859-1"), 8); sb = new StringBuilder(); sb.append(reader.readLine()); String line = "0"; while ((line = reader.readLine()) != null) { sb.append("\n" + line); } response.close(); result = sb.toString(); } catch (Exception e) { } return result; } } 

Pero obtengo tales excepciones como las comentadas en el código.

En realidad estoy llamando a MConnections.PostData () dos veces de mi actividad usando un AsyncTask. Esto podría causar la excepción: Ya conectado, pero estoy utilizando connection.disconnect . Pero ¿por qué sigo recibiendo esa Excepción?

¿Lo estoy usando de manera incorrecta?

Gracias

Para la excepción de protocolo, intente agregar lo siguiente antes de llamar a getOutputStream ():

 connection.setDoOutput(true); 

Descubrió esta respuesta gracias a la respuesta de Brian Roach aquí: https://stackoverflow.com/a/14026377/387781

Nota lateral: Estaba teniendo este problema en mi HTC Thunderbolt corriendo Gingerbread, pero no en mi Nexus 4 corriendo Jelly Bean.

  • Carga de matriz de bytes de imagen con httpurlconnection y android
  • Envío de una solicitud JSON HTTP POST desde Android
  • Cómo cambiar de HttpClient a HttpUrlConnection
  • Digest autenticación en Android mediante HttpURLConnection
  • Solicitud de Android POST utilizando HttpUrlConnection obtener "ya conectado"
  • Comunicación con el servidor sin permiso de Internet
  • Org.apache.http.entity.FileEntity está obsoleto en Android 6 (Marshmallow)
  • ArrayList a DavidWebb Android
  • httpUrlConnection no devuelve la respuesta en caché cuando el servidor devuelve HTTP_NOT_MODIFIED
  • Android descargar problemas de archivo binario
  • HttpEntity está obsoleta en Android ahora, ¿cuál es la alternativa?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.