2011-10-17 16 views
1

我有一個關於創建httpurlconnection(或httpsurlconnection)的問題。實際上這是關於在投射url.openconnection之後設置連接標頭。在運行相同代碼之前,現在不運行。我無法理解。 (例外:已經連接...或者像..)關於android上的HttpURLConnections的問題。 (cast-URLConnection,url.openConnection,getOutPutStream()..)

有時它運行到httpConn.getOutPutStream();此時它給出錯誤「java.net.ProtocolException:OutputStream不可用,因爲請求標頭已經發送!」

我的錯在哪裏?

之前我使用的代碼:所有代碼是here(我有一個問題關於This Code,太)

URL url = new URL(getUrl()); 
URLConnection conn = url.openConnection(); 
HttpURLConnection httpConn=(HttpURLConnection)conn; /*or HttpsURLConnection*/ 
httpConn.set... 
... 
httpConn.connect(); 
... 

我嘗試鑄造後設置一些設置,但結果是一樣的。 conn.set ..的在工作,但鑄造我不能設置任何後...

改變的代碼:

 URL url = new URL(getUrl()); 
     conn = url.openConnection(); 
     conn.setAllowUserInteraction(false); 
     conn.setConnectTimeout(10000); 
     conn.setRequestProperty("Accept-Charset", "utf-8"); 
     conn.setRequestProperty("Content-Type", 
       "text/xml; charset=utf-8"); 
     conn.setRequestProperty("SOAPAction", 
       "http://tempuri.org/IAuthenticationServiceNew/Authenticate"); 
     conn.setRequestProperty("Software-Version", AppData.VERSION); 
     conn.setDoOutput(true); 
     httpConn = (HttpsURLConnection) conn; 
     httpConn.setChunkedStreamingMode(getParams().getBytes("UTF8").length); 
     httpConn.setInstanceFollowRedirects(true); 

     httpConn.connect(); 
     os = httpConn.getOutputStream(); 
     os.write(getParams().getBytes("UTF8")); 

回答

1

這是正確的!
「httpConn.setInstanceFollowRedirects(true)」連接標題並將其發送到服務器。我關閉了這段代碼。

 URL url = new URL(getUrl()); 
     httpConn = (HttpURLConnection) url.openConnection(); 
     httpConn.setDoInput(true); 
     httpConn.setDoOutput(true); 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setUseCaches(false); 
     httpConn.setConnectTimeout(10000); 
     httpConn.setRequestProperty("Accept-Charset", "utf-8"); 
     httpConn.setRequestProperty("Content-Type", 
       "text/xml; charset=utf-8"); 
     httpConn.setRequestProperty("SOAPAction", 
       "http://tempuri.org/IAuthenticationServiceNew/" 
         + conTypeString); 
     httpConn.setRequestProperty("Software-Version", AppData.VERSION); 
     httpConn.setRequestMethod("POST"); 
     httpConn.setChunkedStreamingMode(0); 
     os = httpConn.getOutputStream(); 
     os.write(getParams().getBytes("UTF8"));