2009-12-24 2 views
0

나는 안드로이드에 아주 능숙하며 과 통신하기 위해 http client을 구현하려고합니다.안드로이드 HttpGet, UnresolvedHostException

Get 메서드로 시작하지만 에뮬레이터에서 android 2.0을 사용하는 데 문제가 있습니다.

String url = "http://www.google.fr/search?q=android" 
HttpClient client = new DefaultHttpClient(new BasicHttpParams()); 
HttpGet getMethod = new HttpGet((url)); 
HttpResponse httpResponse = client.execute(getMethod); 
HttpEntity = httpResponse.getEntity()); 
int length = (int) httpEntity.getContentLength(); 
=> length is -1 :-(

로그를 보면 UnresolvedHostException이 표시됩니다.

나는 Google에서 검색 한 결과 동일한 문제가 있지만 답변을 찾지 못한 사람이 여러 명 발견되었습니다.

이 기능을 사용하려면 Android 에뮬레이터를 구성하는 특별한 방법이 있습니까?

정확하게 말하자면, 나는 android manifest에 인터넷 액세스를 추가했습니다.

도움을 주셔서 감사합니다. Luc

+0

더 이상 UnresolvedHostException이 표시되지 않습니다. 브라우저를 통해 URL에 액세스하려고 시도한 후 사라진 것처럼 보입니다. 나는 실제로 무슨 일이 일어 났는지 알 수 없다. 테스트를 계속하고 문제를 업데이트 할 것입니다. 도움을 주셔서 감사합니다. – Luc

답변

2

먼저 브라우저 응용 프로그램에서 해당 페이지에 액세스 해보십시오. 실패한 경우 방화벽을 확인하거나 프록시 서버를 비활성화하십시오.

브라우저가 페이지에 액세스 할 수있게되면 new BasicHttpParams() (필요하지 않음)을 제거하고 도움이되는지 확인하십시오. 그렇지 않으면, 당신이 가진 것은 괜찮은 것 같습니다.

+0

+1 프록시를 비활성화하는 것 외에도 DefaultHttpClient 인스턴스를 프록시 가능으로 설정할 수도 있습니다. – Samuh

+0

고마워, 나는 이것을 시도 할 것이다, 나는 에뮬레이터가 실제 상황과 어떻게 든 다르다고 생각한다. 맞습니까? – Luc

+0

나의 늦은 답변에 대한 죄송합니다. 브라우저에서 URL에 액세스 할 수 있습니다 (http://www.google.fr/search?q=toto). 제대로 작동합니다. 그러나 이것은 여전히 ​​코드를 통해 작동하지 않습니다 ('new BasicHttpParams()'가 있든 없든). google에서 검색 한 결과 DNS 문제로 인한 것일 수도 있다고 지적했습니다. 해결책 중 하나는 DNS 서버를 설정하고이 서버의 URL을 지정하는 에뮬레이터를 실행하는 것이 었습니다. 이 경우 브라우저에서 작동하는 것으로 계속 이해할 수없는 경우 여기 있습니다. ( 고마워요. 룩 – Luc

0

프록시 뒤에 앉아있는 경우 DefaultHttpClient 인스턴스에서 프록시 IP/포트를 설정할 수도 있습니다. 이 작업을 수행하는 방법과 같이 보일 것이다 : 그러나

public void setProxy(DefaultHttpClient httpclient) {  
      final String PROXY_IP = "<insert your IP here>";  
      final int PROXY_PORT = <insert_PROXY_PORT#>;  

      httpclient.getCredentialsProvider().setCredentials(  
        new AuthScope(PROXY_IP, PROXY_PORT),  
        new UsernamePasswordCredentials(  
          "username", "password"));  

      HttpHost proxy = new HttpHost(PROXY_IP, PROXY_PORT);  

      httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,  
        proxy);  


     } 

을, 당신은 전화 코드를 실행하는 경우이 기능을 사용하지 않도록 설정해야합니다 (이 늘 이러한 프록시 설정이) 참고;
전화에서 기존 코드는 정상적으로 작동합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 아니, 프록시가 아닙니다. 실제 전화로 코드를 테스트 해 보겠습니다. 고마워요. – Luc

0

GET 매개 변수없이 URL을 사용해보십시오 (? q = android).

String url = "http://www.google.fr/search"; 

URLParams를 다른 방식으로 설정해야한다고 생각합니까?

+0

안녕하세요, HttpGet 메서드이기 때문에 매개 변수가 URL에 있어야한다고 생각합니다. 사실, 이것은 현재 잘 작동하고 있습니다 (대답에 대한 저의 의견을보십시오). 고마워, 루크 – Luc

관련 문제