개발환경 : JDK 1.5, eclipse-galileo, google API 7(android 2.1), 우분투 9.10, window XP |
안드로이드로 웹서비스를 통해 데이터를 받아올 때 주로 쓰는 클래스가
org.apache.http.client.HttpClient 이다. 자기가 서버를 구현해서 데이터를 받든
포털사이트에서 제공하는 API 서비스를 받든 이걸 이용해서 접근하고
전송받은 데이터를 가공해 사용하는데 간단한 예제들에는 connection 에
문제가 생기면 거의 30 초 이상 기다려야 exception 이 떨어진다. 만약
피치 못한 사정으로 서버가 죽던지 아니면 네트웍 상황이 않좋아서 데이터를
못하져 오게 되었는데 30 초까지 기다려줄 사용자가 어디 있겠는가?
바로 어플은 패기 처분 될것이 뻔하다.
그래서 접속후 일정시간안에 데이터를 가져오지 못한다면 exception을
떨어뜨릴수 있도록 시간 제한을 옵션으로 해둬야한다.
이것저것 찾아보다보니 대부분 HTTP 프로토콜을 이용한 데이터 전송이나
받기는 org.apache.commons.httpclient 클래스를 이용하는 예제 였다. 하지만
이것은 안드로이드 API 에 포함되어있지 않다.
한참을 찾다 아래 예제를 하나 찾았는데 HttpParams 의 setParameter
파라미터로 http.connection.timeout 과 제한 하고자 하는 시간을 넣는다.
1000 에 1초이므로 5초 동안 응답이 없으면 UnknownHostException 을 던지게
된다.
HttpClient httpclient = new DefaultHttpClient(); HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter("http.protocol.expect-continue", false); httpclient.getParams().setParameter("http.connection.timeout", 5000); httpclient.getParams().setParameter("http.socket.timeout", 5000);또 다른 방법은 HttpConnectionParams 클래스에서 지원하는 setConnectionTimeout 과 setSoTimeout 를 이용해 timeout 을 설정하는 것이다
HttpClient httpclient = new DefaultHttpClient(); HttpParams params = httpclient.getParams(); HttpConnectionParams.setConnectionTimeout(params, 5000); HttpConnectionParams.setSoTimeout(params, 5000);
'개발 > 안드로이드' 카테고리의 다른 글
[android]블루투스(bluetooth) 통신 (0) | 2011.05.30 |
---|---|
안드로이드 키보드 옵션 (0) | 2011.05.12 |
Manifest <activity> configChanges attribute. (0) | 2011.05.12 |
Custom ProgressBar 사용 (0) | 2011.05.04 |
WIFI 대기모드에서 돌아가게 하기 (0) | 2011.05.03 |
댓글