-1

我对这个奇怪的问题感到震惊。

我正在使用以下方法下载文件:

public boolean downloadSection(String link,String fileLocation,long currentlyDownloadedBytes){

     try {

                RandomAccessFile file = new RandomAccessFile(fileLocation, "rw");
                file.seek(currentlyDownloadedBytes+1);

                URL imageUrl = new URL(link);
                HttpURLConnection conn  =(HttpURLConnection)imageUrl.openConnection();
                conn.setRequestProperty("Range", "bytes=" + currentlyDownloadedBytes + "-");
                conn.setConnectTimeout(100000);
                conn.setReadTimeout(100000);
                conn.setInstanceFollowRedirects(true);

                InputStream is=conn.getInputStream();
                byte buffer[]=new byte[1024];;
                while (true) {
                    // Read from the server into the buffer
                    int read = is.read(buffer);
                    if (read == -1) {
                        break;
                    }
                   // Write buffer to file
                    file.write(buffer, 0, read);
                 }

                file.close();
                return true;
                } catch (Exception ex){
                      ex.printStackTrace();
                      return false;
                      }

 } 

当我使用此代码下载 mp3 文件时,下载文件打开得很好,但是下载的 android 应用程序(.apk 文件)在打开时会出现包解析错误,并且图像永远不会打开

请帮忙谢谢

4

1 回答 1

0

有几件事看起来很奇怪:

a) 看起来您为这个问题手动添加了方法的签名(因为链接没有类型,所以它甚至不会编译)。

b) 有两个变量/参数 - alreadyDownloadedBytes 和 currentDownloadedBytes。我认为这是由#a引起的

c)您正在执行以下操作

file.seek(currentlyDownloadedBytes+1);

你应该这样做

file.seek(currentlyDownloadedBytes);

原因是因为你寻求抵消。因此,例如,如果您只读取 1 个字节,则必须寻求偏移 1(这将是文件中的第二个字节)。

d) 检查是否有任何异常被抛出和捕获。

e) 您在哪里更新 currentDownloadedBytes 或 alreadyDownloadedBytes?

f) 我的最终建议是调试您的应用程序并确保下载整个文件

于 2012-09-06T20:27:35.997 回答