Android:java.net.protocolException不支持输出

我以前使用HttpClientBasicNameValuePairs ,出于某种原因,我不得不转移到HttpUrlConnection

因此,这个代码,以一定的参数做一个HttpPost请求:

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

但是我得到这样的例外 ,在代码中评论。

其实我使用AsyncTask从我的Activity中调用了两次MConnections.PostData() 。 这可能会导致exception:已连接,但我正在使用connection.disconnect 。 但为什么我仍然得到这个例外?

我用错了吗?

谢谢

对于协议exception,请在调用getOutputStream()之前尝试添加以下内容:

 connection.setDoOutput(true); 

发现这个答案感谢布赖恩·罗奇的答案在这里: https : //stackoverflow.com/a/14026377/387781

附注:我在HTC Thunderbolt上运行姜饼时遇到了这个问题,但是在运行Jelly Bean的Nexus 4上没有这个问题。