下载部分数据(Blackberry)

时间:2013-07-25 06:17:15

标签: web-services blackberry java-me

我一直在尝试通过网络服务下载一些文件并完全下载,但现在我正在尝试添加一项功能,如果文件没有完全下载,应用程序应该只下载剩余的字节数组和附加到现有的,使用

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 + "-");

我得到一个说

的例外
  

流未处于设置状态

如何摆脱这个错误?

1 个答案:

答案 0 :(得分: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) {