2011-03-31 5 views
1

나는 httpclient와 httpget를 사용하여 웹 사이트를 얻으려고합니다. 에뮬레이터와 HTC Desire HD에서 잘 작동합니다. 하지만 Wi-Fi에서 연결을 끊고 3G 네트워크에서 te 웹 페이지를 가져 오려고하면 응답이 불완전한 경우가 있습니다. 나는 웹 페이지 얻기 위해 다음 코드를 사용하고 있습니다 :안드로이드 응용 프로그램에서 3g 안드로이드에 대한 httpget 후 불완전한 응답

public String htmlBody (String strURI) 
{ 
String strBody = ""; 
HttpClient httpclient = new DefaultHttpClient(); 
//HttpProtocolParams.setUseExpectContinue(httpclient.getParams(), false); 
try { 
     HttpGet httpget = new HttpGet(strURI); 
     HttpResponse response = httpclient.execute(httpget, localContext); 

     HttpEntity entity = response.getEntity(); 

     strBody = Functions.convertStreamToString(entity.getContent()); 
    } 
} finally { 
    httpclient.getConnectionManager().shutdown(); 
} 

return strBody; 
} 

응답이 완료되었는지 확인하는 방법이 있습니까? 또는 응답이 불완전한 경우 httpget을 다시 시작 하시겠습니까?

답변

1

최근에 같은 문제가 발생했습니다. 몇 번의 실험을 거친 후에 나는 대답을 찾은 것 같습니다 : 안드로이드는 3G 네트워크에서 단일 InputStream # read() 호출로 완전한 응답을 읽지 않습니다. 다음 코드가 작동합니다.

InputStream in = entity.getContent(); 
int length = 0; 
while (true) { 
    int ret = in.read(buffer, length, buffer.length - length); 
    if (ret == -1) break; 
    length += ret; 
} 
+0

여기에 버퍼 란 무엇입니까? – SathishKumar

0

단지 생각 : 응답 끝에 특수 문자로 웹 사이트를 넣은 다음 해당 문자가 있는지 확인하십시오. 그곳에 있다면 당신은 u가 전체 응답을 얻었음을 알 것이다.

+0

전체 웹 사이트를 얻을 때까지 httpget을 다시 실행하려고했습니다. 몇 차례의 시도 후에 완전한 반응을 얻지 만 때로는 10 ~ 30 회의 응시가 필요합니다. 그래서 그것은 실제로 실행 가능하지 않습니다. – user686404

+0

@ user686404 왜 전체 응답을받지 못합니까? 이상 하네! 예외가 발생하지 않으면 (즉, 소켓 시간 초과) 생각하면 전체 응답을 받아야합니다! – mixkat

+0

예외가 발생하지 않지만 내일 예외가 있는지 다시 확인합니다. – user686404

관련 문제