2011-07-19 9 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

ボタンはdoInBackgroundメソッドでは、あなたのダウンロードAsynchTask.Doを呼び出すクリックするたびに。 thisクラスは、探している仕事の種類に合わせて設計されています。タスクを達成するためにdoInBackground()メソッドを使用し、onPreExecuteを使用して進捗ダイアログを表示できます。

関連する問題