Java Http请求-已连接
基本上,我已经使用这些特定的代码行很长一段时间了,从来没有遇到过问题。什么都没碰,但现在我开始 IllegalStateException-已连接 正好在我设置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{
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()
是毫无意义的。移除它。它现在被移除了,在这种情况下它是毫无意义但无害的。“在您完全编写请求之前尝试获取响应代码”发生在哪里?发布问题时,您应始终共享打印堆栈跟踪。发布问题时,您应始终共享打印堆栈跟踪。