Android: java.lang.IllegalStateException: Already connected
You must close the input stream after reading it to end of stream.
You should remove the call to
connect()
. You have it in the wrong place, but it's automatic and doesn't need to be called at all.You can also remove the line that sets POST. This is implicit in calling
setDoOutput(true)
.You can also remove most of that crud in the copy loop. Use a fixed size buffer:
while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); }
Do not use a new buffer per read; do not call
available()
; do not pass GO; do not collect $200.
Saint Robson
Updated on June 17, 2022Comments
-
Saint Robson almost 2 years
I'm testing a sample of code but its always error at
connection.setDoInput(true);
HttpsURLConnection connection = null; DataOutputStream outputStream = null; DataInputStream inputStream = null; String urlServer = "https://www.myurl.com/upload.php"; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead = 0; int bytesAvailable = 0; int bufferSize = 0; byte[] buffer = null; int maxBufferSize = 1*1024*1024; try { FileInputStream fileInputStream = new FileInputStream(new File(params[0])); URL url = new URL(urlServer); connection = (HttpsURLConnection) url.openConnection(); connection.setConnectTimeout(1000); // Allow Inputs & Outputs connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); // Enable POST method connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); connection.setConnectTimeout(1000); outputStream = new DataOutputStream(connection.getOutputStream()); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + params[0] + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // Read file bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { outputStream.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } outputStream.writeBytes(lineEnd); outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
The error log is
java.lang.IllegalStateException: Already connected
. I have tried these but none is working:connection.setRequestProperty("Connection", "close"); connection.disconnect(); connection.setConnectTimeout(1000);
EDIT: even when i didn't call
connection.connect()
, it's still giving the same erroralready connected
.