我对这个奇怪的问题感到震惊。
我使用以下方法下载文件:
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文件)在打开时提供包解析错误 图片永远不会打开。
请帮忙 谢谢
答案 0 :(得分:0)
有些事情看起来很奇怪:
a)看起来你手动添加了这个问题的方法签名(因为链接没有类型,所以它甚至不会编译)。
b)有两个变量/参数 - alreadyDownloadedBytes和currentDownloadedBytes。我认为它是由#a
引起的c)您正在执行以下操作
file.seek(currentlyDownloadedBytes+1);
你应该这样做
file.seek(currentlyDownloadedBytes);
原因是你试图抵消。因此,例如,如果您只读取1个字节,则必须寻求偏移1(这将是文件中的第二个字节)。
d)检查是否抛出并捕获任何异常。
e)你在哪里更新currentDownloadedBytes或alreadyDownloadedBytes?
f)我最后的建议是调试你的应用程序并确保整个文件已下载