반응형

앱에서 웹서버에 요청하는 방식은 표준 자바를 이용해 요청할 때와 크게 다르지 않습니다.

다만 스레드를 사용해야 한다는 점을 꼭 기억해야 합니다.

웹으로 요청을 하고 응답을 받으면 응답 데이터를 확인하여 화면에 보여줄 수 있습니다.

그리고 그 응답 데이터는 웹페이지일수도 있고 일반 데이터일 수도 있습니다.

웹브라우저에서는 보통 웹페이지를 응답으로 받아 보여주지만 앱에서는 화면을 이미 보여주고 있으므로 데이터만 받아 화면에 있는 뷰에 데이터를 표시하는 경우가 많습니다.

그러면 앱에서 HTTP로 요청하고 응답을 받는 방법에 대해 알아봅시다.

 


HttpURLConnection

자바에서 웹으로 요청하는 방식은 앱에서도 그대로 사용될 수 있습니다.

표준 자바에서 HTTP 클라이언트를 만드는 가장 기본적인 방법은 HttpURLConnection 객체를 사용하는 것입니다.

화면에 버튼을 추가하고 버튼을 클릭했을 때 요청 스레드 객체를 하나 만들어 시작시킵니다.

requestBtn.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {
    String urlStr = input01.getText().toString();
	
    ConnectThread thread = new ConnectThread(urlStr);
    thread.start();
  }
}); 

이 스레드 안에서는 웹으로 요청을 보내고 응답을 받을 수 있습니다.

스레드 안에 만들어진 request 메소드를 보면 HttpURLConnection 객체를 사용하고 있습니다.

먼저 사용자가 입력한 URL 정보를 이용해 URL 객체를 만들고 openConnection 메소드를 호출하면 HttpURLConnection 객체가 반환됩니다.

이 객체에 몇 가지 속성을 설정하고 getResponseCode 메소드를 호출하면 웹서버에 연결하고 응답을 받아줍니다.

연결이 만들어진 객체의 getInputStream 메소드를 호출하면 InputStream 객체를 참조할 수 있으며 이 객체로부터 응답 데이터를 읽어 들입니다.

URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if (conn != null) {
    conn.setConnectTimeout(10000);
    conn.setRequestMethod("GET");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    int resCode = conn.getResponseCode();
    BufferedReader reader = new BufferedReader(
				new InputStreamReader(conn.getInputStream())) ;

BufferedReader 객체는 한 줄씩 읽어 들일 때 유용하게 사용할 수 있습니다.

 

응답 데이터를 화면에 표시하기

Request 메소드를 호출하여 응답 데이터를 읽어 들였다면 화면에 표시할 수 있습니다.

화면을 위한 XML 레이아웃에 TextView를 추가했었다면 이 텍스트뷰의 setText 메소드나 append 메소드를 호출하면 글자가 보이게 됩니다.

다만 스레드에서 응답을 받은 것이므로 핸들러를 반드시 이용해야 한다는 것을 잊으면 안됩니다.

final String output = request(urlStr);
handler.post(new Runnable() {
    public void run() {
        txtMsg.setText(output);
    }
});

인터넷 권한을 AndroidManifest.xml 파일 안에 추가하는 것도 잊지 말아야 합니다.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 

반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

JSON GSON  (0) 2019.03.19
volley  (0) 2019.03.19
HTTP 이해하기  (0) 2019.03.16
소켓 사용하기  (0) 2019.03.16
스레드  (0) 2019.03.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기