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();
}
고마워!
아 - 감사합니다! 그래서 나는 실행 방법의 지연으로 인해 혼란스러워했습니다. 하지만 실제로 요청을 보내고 헤더를받는 작업에서 온 것입니다. 지금 내가 맞습니까? – Thassilo
그래, 맞아. 원하는 경우 대용량 파일을 다운로드하고 비교할 수 있습니다. 시작 부분의 일시 중지는 여전히 거의 같은 길이 여야하며 예상대로 진행 업데이트가 표시되어야합니다. – kabuko