2013-07-25 2 views
1

Я пытался загрузить какой-либо файл через веб-сервис и его совершенно загрузить, но теперь я пытаюсь добавить функцию, если файл не был загружен полностью, приложение необходимо загрузить только оставшийся массив байт и добавить к существующему, используяЗагрузите некоторую часть данных (Blackberry)

connection = (HttpConnection) cf.getConnection(_url).getConnection(); 
int alreadyDownloaded = 0; 

if(connection.getResponseCode() == HttpConnection.HTTP_OK) { 
     inputStream = new DataInputStream(connection.openInputStream()); 
     final int len = (int) connection.getLength(); 
     if (len > 0) { 
     String filename = _url.substring(_url.lastIndexOf('/') + 1); 
     FileConnection outputFile = (FileConnection) Connector.open(path + filename, Connector.READ_WRITE, true); 

     if (!outputFile.exists()) { 
      outputFile.create(); 
     } else { 
      alreadyDownloaded = (int) outputFile.fileSize(); 
      connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-"); 
     } 

и на этой линии

connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-"); 

я получаю исключение, которое говорит

Поток не в установочном состоянии

Как я могу избавиться от этой ошибки?

ответ

2

Проблема заключается в том, что вы вызываете эту линию

connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-"); 

после вы уже открыли соединение, и послал параметры запроса. Так что теперь уже слишком поздно менять свойство Range.

От BlackBerry API docs:

После того, как выходной поток был открыт с помощью openOutputStream или методов openDataOutputStream, попыток изменить запрос параметров через setRequestMethod или setRequestProperty игнорируются. Как только параметры запроса отправлены, эти методы будут вызывать исключение IOException.

Если посмотреть дальше в этом документе, они показывают пример, который объясняет немного больше:

 // Getting the response code will open the connection, 
     // send the request, and read the HTTP response headers. 
     // The headers are stored until requested. 
     rc = c.getResponseCode(); 

Итак, вам просто нужно позвонить setRequestProperty()перед тем эта линия:

if(connection.getResponseCode() == HttpConnection.HTTP_OK) { 
+0

Спасибо Нейту, это сработало! – Khawar

Смежные вопросы