Я пытаюсь загрузить файлы с сервера в Android и показать диалоговое окно прогресса, используя код, очень похожий на ответ предоставлен в этой теме, но я не могу получить длину содержимого в методе getContentLength()
HttpURLConnection
. Длина содержимого для всех файлов равна -1.
Для того же файла я получаю правильную длину содержимого в приложении iOS с помощью метода NSHTTPURLResponse
expectedContentLength
.
Есть ли какая-то принципиальная разница в том, как эти методы извлекают длину содержимого для http-соединения/ответа?
ИЗМЕНИТЬ 1:
Пробовал следовать нескольким вещам, как предложил некоторые ответы и комментарии.
- Установите заголовок
Accept-Encoding
наidentity
- Извлечение длины содержимого в виде строки (из поля заголовка
Content-Length
), а затем преобразование ее в длинную - Пробовал
conn.getContent().toString().length()
вместоgetContentLength()
Ни один из них не работал для меня еще.
Что меня больше всего сбивает с толку, так это то, что я получаю длину контента в iOS, но не на Android.
РЕДАКТИРОВАТЬ 2:
Вот мой код iOS и Android для сравнения -
iOS:
NSURLRequest *request = [NSURLRequest requestWithURL:self.url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1200.0];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
Андроид:
URL url = new URL(downloadUrlString);
connection = (HttpURLConnection) url.openConnection();
connection .setRequestProperty("Accept-Encoding", "identity");
connection.connect();
Единственная разница, которую я вижу, это кеширование. Поэтому я добавил следующую строку в код Android, но ничего не изменилось.
connection.setUseCaches(true);
Content-length
может быть не всегда доступен. Но в вашем случае, я думаю, вы должны сделать запрос, как это делает ios (проверьте свой заголовок, тип контента...). Или, может быть, вы должны предоставить свой код ios, тогда люди смогут вам помочь. - person R4j   schedule 04.03.2014