Android-HttpURLConnection setReadTimeout无法正常工作

Android-HttpURLConnection setReadTimeout无法正常工作,第1张

概述我正在开发一个需要从服务器下载数据的应用程序.我使用以下代码,除了有时在文件下载过程中被卡住之外,该代码行得通.try{URLurl=newURL(dlUrl);con=(HttpURLConnection)url.openConnection();con.setConnectTimeout(1000);//timeout1seccon.se

我正在开发一个需要从服务器下载数据的应用程序.
我使用以下代码,除了有时在文件下载过程中被卡住之外,该代码行得通.

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找出了所有这些.

对于其他存在类似问题的人,在调用getinputStream或连接对象的connect方法之前,尽早调用setReadTimout也很重要.

总结

以上是内存溢出为你收集整理的Android-HttpURLConnection setReadTimeout无法正常工作全部内容,希望文章能够帮你解决Android-HttpURLConnection setReadTimeout无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1076136.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存