나는 안드로이드 서버에서 파일을 다운로드하려고하는데 answer provided in this thread과 매우 비슷한 코드를 사용하여 진행 대화 상자를 표시하려고합니다. 그러나 HttpURLConnection
의 getContentLength()
메서드에서 콘텐츠 길이를 가져올 수 없습니다. 모든 파일의 내용 길이는 -1입니다.안드로이드 HttpURLConnection 콘텐츠 길이
동일한 파일의 경우 iOS 앱에서 콘텐츠 길이가 NSHTTPURLResponse
인 expectedContentLength
개로 바뀌 었습니다.
이러한 방법으로 HTTP 연결/응답의 콘텐츠 길이를 가져 오는 방법에는 몇 가지 기본적인 차이점이 있습니까?
편집 1 : 몇 가지 답변과 의견을 제안 몇 가지 다음
을 시도했다.
- 설정
Accept-Encoding
헤더 대신이 일의getContentLength()
없음의 긴
conn.getContent().toString().length()
로 변환 한 후 identity
Content-Length
에서) 문자열로 콘텐츠 길이를 가져 오기 및에 나를 위해 아직. 내가 가장 당황한 것은 내가 iOS에서 콘텐츠 길이를 얻지 만 Android에서는 그렇지 않다는 것입니다.
Heres는 비교를 위해 내 iOS 및 Android 코드 -
아이폰 OS : EDIT 2
NSURLRequest *request = [NSURLRequest requestWithURL:self.url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1200.0];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
안드로이드 :
URL url = new URL(downloadUrlString);
connection = (HttpURLConnection) url.openConnection();
connection .setRequestProperty("Accept-Encoding", "identity");
connection.connect();
이 유일한 차이점 내가 볼 수 있습니다 캐싱 중입니다. 그래서 나는 안드로이드 코드에서도 다음 줄을 추가했지만 아무것도 바뀌지 않았습니다.
connection.setUseCaches(true);
답을 확인하십시오. http://stackoverflow.com/a/2294899/719212 – R4j
@ R4j 링크를 확인했습니다. 나는 그것을 시도했지만 작동하지 않았다. 이 링크의 응답은 올바른 내용 길이를 반환하지만 int에 비해 너무 큰 httprequests에 대해 더 유효합니다. 나는 어떤 내용 - lentgth을 얻지 않고있다. – lukya
웹 서버, 프로토콜, 연결 또는 다운로드 방법에 따라 'Content-length'를 항상 사용할 수있는 것은 아닙니다. 하지만 귀하의 경우에는 귀하가 ios와 같은 요청을해야한다고 생각합니다 (귀하의 헤더, 콘텐츠 유형을 확인하십시오 ...). 아니면 사람들이 당신을 도울 수있는 코드를 제공해야합니다. – R4j