Java Http请求-已连接

Java Http请求-已连接,java,android,httpurlconnection,Java,Android,Httpurlconnection,基本上,我已经使用这些特定的代码行很长一段时间了,从来没有遇到过问题。什么都没碰,但现在我开始 IllegalStateException-已连接 正好在我设置conn.setUsesCaches(false) 在try finally块中写入此代码,然后重试 public void PutImageToS3(String signedUrl, Bitmap image) throws WampNetworkException, IOException { try{

基本上,我已经使用这些特定的代码行很长一段时间了,从来没有遇到过问题。什么都没碰,但现在我开始

IllegalStateException-已连接

正好在我设置
conn.setUsesCaches(false)


try finally
块中写入此代码,然后重试

public void PutImageToS3(String signedUrl, Bitmap image) throws WampNetworkException, IOException {

       try{
        URL url = new URL(signedUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.getDoOutput();
        conn.setUseCaches(false);
        conn.setRequestMethod("PUT");
        conn.addRequestProperty("Content-Type", "image/jpeg");
        conn.addRequestProperty("Connection", "close");
        OutputStream out = new BufferedOutputStream(conn.getOutputStream());
        image.compress(Bitmap.CompressFormat.JPEG, 100, out);

        if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
            throw new IOException("Failed to upload image to S3: "
                    + conn.getResponseCode() + conn.getResponseMessage() + "\r\n");
        }
     }
     finally{
        out.flush();
        out.close();
        conn.disconnect();
      }
    }

try finally
块中写入此代码,然后重试

public void PutImageToS3(String signedUrl, Bitmap image) throws WampNetworkException, IOException {

       try{
        URL url = new URL(signedUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.getDoOutput();
        conn.setUseCaches(false);
        conn.setRequestMethod("PUT");
        conn.addRequestProperty("Content-Type", "image/jpeg");
        conn.addRequestProperty("Connection", "close");
        OutputStream out = new BufferedOutputStream(conn.getOutputStream());
        image.compress(Bitmap.CompressFormat.JPEG, 100, out);

        if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
            throw new IOException("Failed to upload image to S3: "
                    + conn.getResponseCode() + conn.getResponseMessage() + "\r\n");
        }
     }
     finally{
        out.flush();
        out.close();
        conn.disconnect();
      }
    }

您需要在获取响应代码之前编写请求

close()
移动到
getResponseCode()
之前,并移除冗余的
flush()


注意:为什么要调用
getDoOutput()
并忽略结果?

在获取响应代码之前,需要编写请求

close()
移动到
getResponseCode()
之前,并移除冗余的
flush()


注意:为什么要调用
getDoOutput()
并忽略结果?

找到了令人惊讶的解决方案!今天路由器出了问题,所以上传简直是地狱。一旦从网络供应商切换到互联网,它就像一个魅力:)GG

找到了惊人的解决方案!今天路由器出了问题,所以上传简直是地狱。一旦从网络供应商切换到互联网,它就像一个魅力:)GG

删除if that throws exception后重试删除if that throws exception后没有结果,这是一个put函数,只是上传一张图片。但我也没有在任何地方设置它,最好将其删除:)但问题是它为什么停止工作?它停止工作是因为您试图在编写完请求之前获取响应代码。您没有结果,因为您没有将其存储在任何位置。调用
getDoOutput()
是毫无意义的。移除它。它现在被移除了,在这种情况下它是毫无意义但无害的。“在您完全编写请求之前尝试获取响应代码”发生在哪里?我没有结果,这是一个put函数,只是上传了一张图片。但我也没有在任何地方设置它,最好将其删除:)但问题是它为什么停止工作?它停止工作是因为您试图在编写完请求之前获取响应代码。您没有结果,因为您没有将其存储在任何位置。调用
getDoOutput()
是毫无意义的。移除它。它现在被移除了,在这种情况下它是毫无意义但无害的。“在您完全编写请求之前尝试获取响应代码”发生在哪里?发布问题时,您应始终共享打印堆栈跟踪。发布问题时,您应始终共享打印堆栈跟踪。