2016-09-30 80 views
0

我試圖使用HttpURLConnection在Android應用程序中發送和接收消息。此代碼工作正常在Java應用程序,但在Android上運行時,我得到以下異常:Android上的HttpURLConnection getOutputStream類拋出異常

java.lang.ClassCastException: com.android.okio.RealBufferedSink$1 cannot be cast to java.io.ByteArrayOutputStream 

這種情況出現的代碼:

 URL url = new URL(destURI.toString()); 

     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     // Set request properties and headers 
     con.setDoOutput(true); 
     con.setDoInput(true); 
     con.setRequestProperty(HEADER_CONTENT_TYPE, CONTENT_TYPE_LS); 
     con.setRequestProperty(HEADER_CONTENT_LENGTH, new Integer(wrapperBytes.length).toString()); 
     con.setRequestMethod(METHOD_POST); 

     // Set connect and read timeouts 
     con.setConnectTimeout(timeoutInMillis); 
     con.setReadTimeout(timeoutInMillis); 

     // Write request content 
     ByteArrayOutputStream out = (ByteArrayOutputStream) con.getOutputStream(); 
     out.write(wrapperBytes); 
     out.flush(); 

我已經看過了Android的參考頁和這些似乎是說我期望的,getOutputStream()返回OutputStream。這應該可以轉換爲ByteArrayOutputStream

RealBufferedSink從哪裏來?爲什麼我沒有收到OutputStream

任何幫助將不勝感激!

+0

只是用這樣的: 的OutputStream OUT = con.getOutputStream(); – itzswan

回答

0

鑄造

ByteArrayOutputStream out = (ByteArrayOutputStream) con.getOutputStream(); 

不推薦, 你可以嘗試:

OutputStream out = new BufferedOutputStream(con.getOutputStream()); 
+0

我不認爲這是一個有效的構造函數 - 有'新的ByteArrayOuputStream()'和'新的ByteArrayOutputStream(int size)',但沒有一個採用OutputStream參數 – JLo237

+0

@ JLo237我更新了答案,實際上它應該是BufferedOutputStream – super1ha1

+0

就是這樣,非常感謝! – JLo237