2

http-get-request를 수행하고 사용자에게 다운로드 진행 상황을 표시하려고합니다. 나는 AsyncTask의 개념에 익숙하며 BufferedInputStream과 함께 URLConnection을 사용하여 진행 상황을 보여 주면서 파일을 다운로드하는 방법을 알고 있으며 http-get-request를 실행하고 HttpResponse를받는 방법을 알고있다.비동기로 httprequest를 수행하고 응답 다운로드 진행 상황을 표시하는 방법

하지만 저는 execute 메소드의 진행 상황을 보여줄 수 없습니다. 나는 아래의 방법을 발견했다. 그러나 모든 데이터가 이미 다운로드 된 후이 모든 것을 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

관련 문제