2014-02-07 9 views
0

.disconnect() 메서드를 사용하여 HTTPURLConnection을 연결 해제하는 방법을 알고 있습니다. 하지만 URLConnection 객체는 어떻습니까? Myy 앱은 URLConnection.getInputStream을 통해 서버에서 직접 링크가있는 파일을 다운로드합니다. 다운로드 진행률에는 중지 단추가 있습니다. 사용자가 멈추었을 때 다운로드를 중단하고 싶습니다. 대답 해줘서 고마워. 당신이 URLConnection.getInputStream()를 사용하는 경우안드로이드 URLConnection 연결을 끊는 방법

+0

다운로드를 중지하려면 스트림을 읽는 방법에 따라 다릅니다. 코드의 관련 부분을 붙여 넣어야합니다. – desseim

답변

1

, 다음과 같이 보일 수 있습니다 귀하의 다운로드 코드는 다음과 같습니다 : 그래서

InputStream fileInputStream; // initialized 

// ... 

byte[] buffer = new byte[1024 * 32]; 
int len; 
int totalLen = 0; 
while ((len = fileInputStream.read(buffer)) != -1) { 
    fstream.write(buffer, 0, len); 
    totalLen += len; 
} 

,이 루프를 중단해야이 다운로드 한 번에 몇 가지 조건이 하나의 방법에 해당된다 중지 다운로드가 작업자 스레드에있는 동안 대부분은 UI 스레드에서 설정하기 때문에, AtomicBoolean를 사용하는 :

// in your download class 
AtomicBoolean abort = new AtomicBoolean(false); 

// Updated loop 
while ((len = fileInputStream.read(buffer)) != -1) { 
    if (abort.get()) { 
     // do any necessary cleanup like closing streams 
     break; 
    } 
    fstream.write(buffer, 0, len); 
    totalLen += len; 
} 

다음 버튼을 클릭 핸들러에 추가 : abort.set(true);

+0

boolean에 대해 비교 및 ​​스왑 연산을 수행해야하는 경우 (필요 없음) '휘발성 부울'만으로 충분합니다. – desseim

+0

감사합니다. 전에 atomicboolean을 사용하지 않았습니다. 매우 유용합니다. 이전에 부울과 동일한 작업을 시도했으나 작동하지 않았습니다. – themaster33