2012-03-08 1 views
2

私はファイルの長さとして-1を得る問題があります。私はそれを修正するために多くの時間をかけました。なぜこのようなことが起こるのか分かりません。また、私は再びasynctaskを呼び出すと、song1は同じままです(しかし、song1の値は問題ありません。私は乾杯してテストしています)。 'song1'は文字列であり、毎回異なる値を持ちます。ありがとうございました。ファイルの長さが-1になるasynctask androidダウンロード

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DIALOG_DOWNLOAD_PROGRESS: 
      mProgressDialog = new ProgressDialog(this); 

      mProgressDialog.setMessage("Downloading "+song1+".."); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 
      return mProgressDialog; 
     default: 
      return null; 
    } 
} 




protected String doInBackground(String... aurl) { 
     int count; 

     try { 
      URL url = new URL(aurl[0]); 
      URLConnection conexion = url.openConnection(); 
      ((HttpURLConnection) conexion).setInstanceFollowRedirects(true); 
      conexion.connect(); 


      int lenghtOfFile = conexion.getContentLength(); 
      Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile); 

      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream("/sdcard/download/"+song1); 

      byte data[] = new byte[20480]; 

      long total = 0; 


      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress(""+(int)((total/lenghtOfFile)*100)); 
       output.write(data, 0, count); 
      } 

      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (Exception e) {} 
     return null; 

    } 

とここに私のLogCatは

03-08 20:25:17.714: D/ANDRO_ASYNC(14559): Lenght of file: -1 
03-08 20:25:18.564: D/dalvikvm(14559): GC freed 18632 objects/1179128 bytes in 112ms 
03-08 20:25:18.864: I/global(14559): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required. 
03-08 20:25:18.874: D/ANDRO_ASYNC(14559): -420000 
03-08 20:25:18.954: D/ANDRO_ASYNC(14559): -700000 
03-08 20:25:18.984: D/ANDRO_ASYNC(14559): -1820000 
03-08 20:25:19.029: D/ANDRO_ASYNC(14559): -1960000 

答えて

0

が-1の長さの取得では珍しいことではありません。通常、サーバーがデータのバッファーを送信している可能性があります(フルになっている可能性が高い)が、応答の全体サイズはまだ分かりません。それとも、怠惰な開発者です。

長さが-1の場合は、ストリームの最後になるまで情報をロードするだけで済みます。

+0

通常は-1の長さでダウンロードしますが、基本的な問題はプログレスバーが機能しないことです。まだ0%で立ち往生し、ダウンロードが完了した後に消えた –

+0

あなたはプログレスバーであなたのonProgressUpdateメソッドで何かをしていますか?価値は何ですか?私はそれが非常に大きな負の値だと推測しているので、0にとどまることは私には意味をなさない。 –

+0

この質問を非同期タスクと進捗状況で見てください:http://stackoverflow.com/questions/6450275/android-how-to-work-with-asynctasks-progressdialog –

関連する問題