2011-07-19 104 views
1

我創建了一個應用程序,它允許用戶下載音頻文件並將其存儲在他們的SD卡中。下面的代碼實際上工作,但問題是每次我點擊下載按鈕,整個應用程序凍結,直到下載結束。我怎樣才能解決這個問題,讓它不會凍結,只要我點擊下載按鈕?請幫助我,我一直在努力尋找解決方案,我非常感謝您的幫助。提前致謝。在Android中下載mp3文件問題

嘗試{

  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(); 
      } 

     } 
+1

由於您的下載方式下載的作品你的文件,如應用程序已凍結它會創建一個印象。但事實是你的方法在後面執行。因此,爲了避免應用程序凍結,您可以顯示ProgressDialog,直到下載方法正在下載,並且在執行後,您可以取消ProgressDialog。 –

+0

我其實已經嘗試過,但發生過同樣的事情。 ProgressDialog會在下載結束後顯示。感謝您的答覆 – user739375

回答

1

由於您的下載方法可用於下載您的文件,因此會產生類似應用程序凍結的印象。但事實是你的方法在後面執行。因此,爲了避免應用程序凍結,您可以顯示ProgressDialog,直到下載方法正在下載,並且在執行後,您可以取消ProgressDialog。

所以你必須使用一個單獨的線程下載。這裏是解釋你如何同時下載和顯示progressDialog的鏈接。

http://www.bogotobogo.com/Android/android23HTTP.html

0

每次單擊該按鈕來調用AsynchTask.Do在doInBackground方法您的下載。 this類專爲您正在尋找的工作類型而設計。使用doInBackground()方法完成任務,並在onExecute上顯示進度對話框。