차근차근/Android

http 통신

예쁜꽃이피었으면 2014. 8. 28. 18:00

http://wowmymwow.tistory.com/m/post/58


2개의 방법이 있다. 

첫번째는 java.net 패키지를 이용하는 것이다. 

두번째는 org.apache 패키지를 이용하는 것이다. 

2개가 비슷해서 처음에는 좀 헷갈린다. 

그래서 차이점에 대해서 오늘 배운 것을 정리해보겠다.

1. java.net 사용법
URL url = new URL(addr);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            if (conn != null) {
                conn.setConnectTimeout(10000);
                conn.setUseCaches(false);
                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(conn.getInputStream()));
                    for (;;) {
                        String line = br.readLine();
                        if (line == null) break;
                        html.append(line + '\n'); 
                    }
                    br.close();
                }
                conn.disconnect();
            }

2.번째 org.apache 사용법
HttpGet httpget = new HttpGet(addr);
        DefaultHttpClient client = new DefaultHttpClient();
        StringBuilder html = new StringBuilder(); 
        try {
            HttpResponse response = client.execute(httpget);
            BufferedReader br = new BufferedReader(new 
                    InputStreamReader(response.getEntity().getContent()));
            for (;;) {
                String line = br.readLine();
                if (line == null) break;
                html.append(line + '\n'); 
            }
            br.close();
        } 


이 정도이다.

좀 다른 점은 thread를 사용할 때 apache 에서는 ResponseHanlder 를 등록할 수 있다는 것이다. html 소스를 모두 받고 나면 실행하는 핸들러이다. 
public void run() {
            HttpGet get = new HttpGet(mAddr);
            DefaultHttpClient client = new DefaultHttpClient();
            try {
                client.execute(get,mResHandler);
            } 
            catch (Exception e) {;}
        }

ResponseHandler<String> mResHandler = new ResponseHandler<String>() {
        public String handleResponse(HttpResponse response) {
            StringBuilder html = new StringBuilder(); 
            try {
                BufferedReader br = new BufferedReader(new 
                        InputStreamReader(response.getEntity().getContent()));
                for (;;) {
                    String line = br.readLine();
                    if (line == null) break;
                    html.append(line + '\n'); 
                }
                br.close();

                Message message = mAfterDown.obtainMessage();
                Bundle bundle = new Bundle();
                bundle.putString("result", html.toString());
                message.setData(bundle);
                mAfterDown.sendMessage(message);
            } catch (Exception e) {;}
            return html.toString();
        }
    };

이 정도이다. client.execute(get,mResHandler);를 실행한후다 끝나면  handleResponse()를 실행한다.
 좀 이해하기 어려운 것은 response.getEntity().getContent() 부분이다. 
도대체 getEntity()가 무엇인지 모르겠다. 


반응형