1

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

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

我得到一个例外,说

流未处于设置状态

我怎样才能摆脱这个错误?

4

1 回答 1

2

问题是您正在调用此行

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

您已经打开连接并发送请求参数之后。因此,现在更改Range属性为时已晚。

来自BlackBerry API 文档

在 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) {
于 2013-07-25T08:13:36.427 回答