gpt4 book ai didi

android - HttpURLConnection setReadTimeout 不工作

转载 作者:太空狗 更新时间:2023-10-29 12:45:31 26 4
gpt4 key购买 nike

我正在开发一个需要从服务器下载数据的应用程序。
我使用以下代码,除了有时在文件下载过程中卡住之外,它可以正常工作。

try{
URL url = new URL( dlUrl );

con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(1000); // timeout 1 sec
con.setReadTimeout(1000); // timeout 1 sec

// get file length
int lenghtOfFile = con.getContentLength();

is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + "myvideos";

File file = new File( dir );
if( !file.exists() ){
if( file.mkdir()){
// directory succesfully created
}
}

fos = new FileOutputStream(file + "/" + "video.mp4");
byte data[] = new byte[1024];

long total = 0;
while( (count = is.read(data)) != -1 ){
total += count;
publishProgress((int)((total*100)/lenghtOfFile));
fos.write(data, 0, count);
}
} catch (Exception e) {
Log.e(TAG, "DOWNLOAD ERROR = " + e.toString() );
}
finally{
// close streams
}

问题可能是我使用的 WIFI 连接不稳定,或者我的代码缺少某些东西。
现在我想在下载停止时添加一个解决方法,但不幸的是 setReadTimeout 似乎没有效果!
我尝试了 Stackoverflow 中建议的解决方案,但没有一个适合我。
我是否缺少某种设置?
知道为什么 setReadTimeout 无效吗?

最佳答案

这是对已有一年之久的问题的新答案,但我的代码中有一个类似的问题,我已经能够解决。

这一行是问题所在:

is = url.openStream();

获取输入流的正确方法是简单地从连接对象而不是url对象获取输入流。

is = con.getInputStream();

前一种方法可能会打开另一个网络连接,与通过调用 url.openConnection()

获得的连接对象分开

我通过评估 this web blog page 弄明白了这一切.

对于遇到类似问题的其他人,尽早调用 setReadTimout 也很重要 - 在调用连接对象上的 getInputStreamconnect 方法之前。

关于android - HttpURLConnection setReadTimeout 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732823/

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