Reputation: 1818
Following is my android code for downloading file from sever.
private String executeMultipart_download(String uri, String filepath)
throws SocketTimeoutException, IOException {
int count;
System.setProperty("http.keepAlive", "false");
// uri="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTzoeDGx78aM1InBnPLNb1209jyc2Ck0cRG9x113SalI9FsPiMXyrts4fdU";
URL url = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
int lenghtOfFile = connection.getContentLength();
Log.d("File Download", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(filepath);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress("" + (int) ((total * 100) / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
httpStatus = connection.getResponseCode();
String statusMessage = connection.getResponseMessage();
connection.disconnect();
return statusMessage;
}
I have debugged this code. This function is called only once even if it hits server twice. Is their any error in this code.
Thanks
Upvotes: 5
Views: 2268
Reputation: 2608
Your error lies in this line:
url.openStream()
If we go to grepcode to sources of this function, then we will see:
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
But you already opened connection, so you opening connection twice.
As solution you need to replace url.openStream()
with connection.getInputStream()
Thus your snipped will looks like:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
int lenghtOfFile = connection.getContentLength();
Log.d("File Download", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(connection.getInputStream());
Upvotes: 8