下载android大文件
当我尝试此代码时,它开始下载,但随后出现警报“强制关闭” 我应该怎么办?使用某种后台线程?
try {
long startTime = System.currentTimeMillis();
URL u = new URL("http://file.podfm.ru/3/33/332/3322/mp3/24785.mp3");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File("/sdcard/","logo.mp3"));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ( (len1 = in.read(buffer)) != -1 ) {
f.write(buffer,0, len1);
}
f.close();
Log.d("ImageManager", "download ready in" +
((System.currentTimeMillis() - startTime) / 1000) + " sec");
}
catch (IOException e)
{
Log.d("ImageManager", "Error" +
((System.currentTimeMillis()) / 1000) + e + " sec");
}
When I try this code, it starts download but then stuck with alert "force close"
what should I do? Use some kind of background thread?
try {
long startTime = System.currentTimeMillis();
URL u = new URL("http://file.podfm.ru/3/33/332/3322/mp3/24785.mp3");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File("/sdcard/","logo.mp3"));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ( (len1 = in.read(buffer)) != -1 ) {
f.write(buffer,0, len1);
}
f.close();
Log.d("ImageManager", "download ready in" +
((System.currentTimeMillis() - startTime) / 1000) + " sec");
}
catch (IOException e)
{
Log.d("ImageManager", "Error" +
((System.currentTimeMillis()) / 1000) + e + " sec");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我上周正在处理类似的问题,最终使用
AsyncTask
显示进度条,因为下载文件可能需要一些时间。一种方法是将下面的类嵌套在您的 Activity 中,然后在您需要的地方调用它,就像这样:或者如果该类不在活动中并从活动调用。
这传递了活动,因此我们可以访问方法 getSystemService();
这是完成所有肮脏工作的实际代码。您可能需要根据需要修改它。
I was dealing with similar problem last week and ended up using
AsyncTask
with progress bar displayed since it could take some time for the file to be downloaded. One way of doing it is to have below class nested in yourActivity
and just call it where you need to simply like this:Or if the class is not located within an activity and calling from an activity..
This passes the activity so we have access to method getSystemService();
Here is the actual code doing all the dirty work. You will probably have to modify it for your needs.
您应该尝试使用 AsyncTask。您收到强制退出对话框是因为您尝试在 UI 线程上执行过多的工作,并且 Android 判断您的应用程序已变得无响应。
这个问题的答案有一些很好的链接。
类似下面的内容将是一个好的开始:
然后使用以下命令执行任务:
You should try using an AsyncTask. You are getting the force quit dialog because you are trying to do too much work on the UI thread and Android judges that your application has become unresponsive.
The answers to this question have some good links.
Something like the following would be a good start:
and then execute the task with: