Android get an error when i try to setRequestProperty to HttpURLConnection

i'm wrote simple download manager and i'm trying to set RESUME for all downloads. after googleing for how to do that. i know must be setRequestProperty for connection, but my code does not work and i get this error:

FATAL EXCEPTION: Thread-882
    java.lang.IllegalStateException: Cannot set request property after connection is made
            at libcore.net.http.HttpURLConnectionImpl.setRequestProperty(HttpURLConnectionImpl.java:510)

My code is:

URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

final int fileSize = connection.getContentLength();

File file = new File(filepath);
if (file.exists() && fileSize == file.length()) {
    return;
} else if (file.exists()) {
    connection.setRequestProperty("Range", "bytes="+(file.length())+"-");
}else
    connection.setRequestProperty("Range", "bytes=" + downloadedSize + "-");

connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();

how to resolve this problem and correctly set setRequestProperty to connection?

Jon Skeet
people
quotationmark

The problem is that you're calling connection.getContentLength() before you're calling setRequestProperty(). The content length is only available after you've made a request, at which point you can't set the request property...

It's not entirely clear what you're trying to do, but one option is to use a HEAD request just to get the content length, and then make a separate request if you need to get just a portion of the data. Be aware that it's possible that the content length will change between requests, of course.

However, I would actually suggest keeping more metadata somewhere in your download manager - so that when you first start downloading the data, you keep a record of the total size, so that you don't need to make the HEAD request when resuming - you can tell just from the local information whether or not you've already downloaded a file. (This has the same problem in terms of content changing, but that's a different matter.)

people

See more on this question at Stackoverflow