我创建了一个应用程序,允许用户下载音频文件并将其存储在SD卡中。下面的代码实际上正在工作,但问题是每次我点击下载按钮,整个应用程序冻结,直到下载结束。我怎样才能解决这个问题,以便每当我点击下载按钮时它都不会冻结?请帮助我,我一直在努力寻找解决方案,我非常感谢你的帮助。提前谢谢。
尝试{
URL url = new URL("http://www.yourfile.mp3");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getExternalStorageDirectory()
+ "/download/";
Log.v("", "PATH: " + PATH);
File file = new File(PATH);
file.mkdirs();
String fileName = "yourfilename.mp3";
File outputFile = new File(file, fileName);
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
}catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
由于您的下载方法可以下载您的文件,因此会产生应用已冻结的印象。但事实是你的方法正在后面执行。因此,为了避免应用程序冻结,您可以显示ProgressDialog直到下载方法正在下载,并且在执行后您可以取消ProgressDialog。
所以你必须使用一个单独的线程来下载。这是一个链接,它解释了如何同时下载和显示progressDialog。
答案 1 :(得分:0)
每次单击按钮调用AsynchTask。请在doInBackground方法中下载。 this类的设计完全适用于您正在寻找的工作类型。使用doInBackground()方法完成任务,而onPreExecute则可以显示进度对话框。