gpt4 book ai didi

java - 当我尝试将 RequestProperty 设置为 HttpURLConnection 时,Android 出现错误

转载 作者:太空狗 更新时间:2023-10-29 13:19:29 25 4
gpt4 key购买 nike

我写了一个简单的下载管理器,我正在尝试为所有下载设置 RESUME。在谷歌搜索如何做到这一点之后。我知道必须 setRequestProperty 才能连接,但我的代码不起作用,我收到此错误:

FATAL EXCEPTION: Thread-882
java.lang.IllegalStateException: Cannot set request property after connection is made
at libcore.net.http.HttpURLConnectionImpl.setRequestProperty(HttpURLConnectionImpl.java:510)

我的代码是:

URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

final int fileSize = connection.getContentLength();

File file = new File(filepath);
if (file.exists() && fileSize == file.length()) {
return;
} else if (file.exists()) {
connection.setRequestProperty("Range", "bytes="+(file.length())+"-");
}else
connection.setRequestProperty("Range", "bytes=" + downloadedSize + "-");

connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();

如何解决这个问题并正确设置setRequestProperty为connection?

最佳答案

问题是您在调用 setRequestProperty() 之前调用了 connection.getContentLength()。内容长度仅在您发出请求后可用,此时您无法设置请求属性...

目前还不完全清楚您要做什么,但一种选择是使用 HEAD 请求来获取内容长度,然后制作一个单独的如果您只需要获取一部分数据,请请求。当然,请注意内容长度可能会在请求之间发生变化。

但是,我实际上建议在下载管理器中的某处保留更多元数据 - 这样当您第一次开始下载数据时,您会记录总大小,这样您就不需要制作 恢复时的 HEAD 请求 - 你可以从本地信息中判断你是否已经下载了一个文件。 (这在内容变化方面有同样的问题,但那是另一回事。)

关于java - 当我尝试将 RequestProperty 设置为 HttpURLConnection 时,Android 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com