Android上的HttpURLConnection getOutputStream类强制转换异常

时间:2016-09-30 10:04:23

标签: android httpurlconnection outputstream

我正在尝试使用java.lang.ClassCastException: com.android.okio.RealBufferedSink$1 cannot be cast to java.io.ByteArrayOutputStream 在Android应用程序中发送和接收消息。此代码在java应用程序中工作正常,但在Android上运行时,我得到以下异常:

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

发生这种情况的代码:

getOutputStream()

我查看了Android参考页面,这些似乎说出了我的期望,OutputStream返回ByteArrayOutputStream。然后应该将其转换为RealBufferedSink

OutputStream来自哪里?为什么我没有得到{{1}}回来?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

施法

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

不推荐, 你可以试试:

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