2

http-get-requestを実行して、ダウンロードの進行状況をユーザーに表示しようとしています。私はAsyncTaskの概念に精通しています。また、URLConnectionとBufferedInputStreamを併用してファイルをダウンロードし、進捗状況を表示し、http-get-requestを実行し、HttpResponseを受け取る方法を知っています。非同期でhttprequestを実行し、応答のダウンロードの進行状況を表示する方法

しかし、私はちょうど実行メソッドの進捗状況を表示する方法を見つけることができません。私は以下の方法を見つけました。しかし、すべてのデータがすでにダウンロードされた後、InputStreamからOutputStreamにコピーするのは何ですか?私はこのコピープロセスの進捗状況を見たいとは思わないが、HttpResponseの進捗状況を見たい! - 助言がありますか?推理で私の誤りはどこですか?私は非常に重要なことを忘れてしまったという強い気持ちがあります...

String sURL = getString(R.string.DOWNLOAD_URL) + getString(R.string.DATABASE_FILE_NAME); 
HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(sURL); 
HttpResponse response = httpclient.execute(httpget); 
HttpEntity entity = response.getEntity(); 
Header[] clHeaders = response.getHeaders("Content-Length"); 
Header header = clHeaders[0]; 
int totalSize = Integer.parseInt(header.getValue()); 
int downloadedSize = 0; 
if (entity != null) { 
    InputStream stream = entity.getContent(); 
    byte buf[] = new byte[1024 * 1024]; 
    int numBytesRead; 

    BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file)); 
    do { 
     numBytesRead = stream.read(buf); 
     if (numBytesRead > 0) { 
      fos.write(buf, 0, numBytesRead); 
      downloadedSize += numBytesRead; 
      //updateProgress(downloadedSize, totalSize); 
     } 
    } while (numBytesRead > 0); 
    fos.flush(); 
    fos.close(); 
    stream.close(); 
    httpclient.getConnectionManager().shutdown(); 
} 

ありがとう!

答えて

2

そのコードは正常です。 InputStreamは、ダウンロードしているデータのストリームです。各チャンクをダウンロードするときに、そのチャンクをファイルに保存し、進行状況を更新します。データが既にダウンロードされた後ではありません。

+0

ああ - ありがとう!だから私はちょうど実行メソッドの遅延のために混乱していた。しかし、実際には要求を送信してヘッダーを受け取る作業から来ています。今私は正しいですか? – Thassilo

+0

うん、そうだね。必要に応じて、いくつかの非常に大きなファイルをダウンロードして見ることができます。最初の一時停止はまだ同じ長さでなければならず、その後、期待どおり進捗状況の更新が表示されるはずです。 – kabuko

関連する問題