
我正在开发一个需要从服务器下载数据的应用程序.
我使用以下代码,除了有时在文件下载过程中被卡住之外,该代码行得通.
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无法正常工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)