下载的jpg,apk文件从未打开但mp3文件打开

时间:2012-09-06 19:09:08

标签: android download random-access download-manager

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

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

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文件)在打开时提供包解析错误 图片永远不会打开

请帮忙 谢谢

1 个答案:

答案 0 :(得分:0)

有些事情看起来很奇怪:

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

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

引起的

c)您正在执行以下操作

file.seek(currentlyDownloadedBytes+1);

你应该这样做

file.seek(currentlyDownloadedBytes);

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

d)检查是否抛出并捕获任何异常。

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

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