-
[안드로이드] 안드로이드에서 HTTP 연결하고 데이터 처리하기앱개발/안드로이드 앱 개발 2018. 3. 30. 12:21
안드로이드-http-연결을-통해-데이터-받아오기.md 안드로이드 http 연결을 통해 데이터 받아오기
안드로이드에서는
String
에 저장된url
주소를 통해 http/https 네트워크 통신으로 데이터를 쉽게 가져올 수 있는 api를 제공한다.String
에 저장된 주소를 통해 실제 http 연결을 수행하기 위해서는URL
클래스를 사용하고, 실제 네트워크 통신을 수행하기 위해서는HttpURLConnection
클래스를 사용한다.연결된 네트워크에서 데이터를 받아와 처리하는데에는
InputStream
및InputStreamReader
를 사용한다. 두 클래스를 통해 받아온 데이터는 바이너리 데이터로 Human readable 하지 않다. 이를 human readable한 데이터 혹은 JSON 오브젝트로 변환하기 위해서는BufferReader
를 사용한다.사용가능한 URL로 변환하기
아래의 예제 코드는 전부 안드로이드 스튜디오에서 테스트한 내용이며, 추가적인 코드는 생략한다. 전체코드는 본 문서의 최하단부 링크를 참조하기 바란다.
String
에 저장된 주소값을 http 연결에 사용가능한 url 주소로 변환하는 과정은 간단하다. 위의 예제에서 처럼 URL 클래스를 사용하여, 생성자에String
을 전달하면 된다. URL 클래스 생성자는MalformedURLException
예외가 발생할 수 있으므로 처리해야 한다.URL을 통해 Http 연결하기
생성된
URL
은openConnection()
메소드를 제공한다. 해당 메소드는 생성된URL
을 통해 실제 통신을 연결하기 위한URLConnection
클래스를 반환한다. 아래의 예제를 통해 살펴보자URL
클래스의openConnection()
메소드를 통해URLConnection
오브젝트를 생성하여 실제 네트워크 연결을 수행한다. 연결에 필요한 메타 정보는 위의 예제에서 볼 수 있는 메소드 및 다양한 메소드로 설정 할 수 있다. 연결시 사용할 다양한 속성을 지정한 이후에는URLConnection
및 자식 클래스들에서 제공하는connect()
메소드를 사용해서 실제 연결을 수행한다. 이후getResponseCode()
메소드를 통해 연결 성공 여부를 판별하고 추가작업을 수행하면 된다.InputStream을 통해 데이터 읽어들이기
Http 연결이 되었으면 이제 데이터를 읽어올 차례이다. 연결에 에러가 없이
getResponseCode()
가 200임을 확인한 뒤에 진행을 해야하는것을 명심하자.URLConnection
클래스에서는getInputStream()
메소드를 지원한다. 해당 메소드는 연결된 네트워크로부터 데이터를 읽어오는 메소드이다. 반환하는 오브젝트는 바이너리 형태로 데이터를 관리하는InputStream
클래스이다. 아래 예제를 통해 살펴보자.getInputStream()
메소드를 통해 가져온InputStream
은 바이너리 형태로 데이터 스트림을 관리하기 때문에, human readable 한 데이터로 변환 하기 위해InputStreamReader
를 사용하였다. 생성자의 2번째 매개변수로Charset.forName('UTF-8')
을 주어, 바이트 스트림을UTF-8
캐릭터셋으로 해석된 문자열로 변환한다.변환된 문자열 데이터 스트림을 편하게 가공하기 위해서
BufferedReader
를 사용하였다. 해당 클래스에서 제공하는readLine()
메소드를 사용하면 한 줄씩 데이터를 읽을 수 있다. 이를 통해서 자신이 원하는 지점까지 데이터를 읽어 들인 후 하고자 하는 일을 수행하면 된다.예제에서는 데이터 스트림에 모든 데이터를 소진할 때까지 읽어 들인뒤
output
변수에 추가하고, 해당 데이터를String
으로 변환해서 반환하고 있다. 이후 반환된String
을 가지고 데이터 처리를 수행하면 된다.실제로 실행하고 확인 가능한 코드를 아래에 첨부하였으니 확인해보길 바란다. 해당 코드는 매우 짧은 코드이므로 코드 전체를 읽어보는 것도 좋을 것이다.
Udacity 샘플 코드
본 문서는 Udacity의 Android Basics: Networking 강의에서 발췌한 내용이다. 무료 강의로 훌륭한 안드로이드 개발 강의들을 제공하고 있다. 실제로 http 연결을 사용한 안드로이드 애플리케이션 예제의 전체코드는 아래의 링크를 통해 확인할 수 있다.
'앱개발 > 안드로이드 앱 개발' 카테고리의 다른 글
[React Native] 설치 및 기본 실행 (0) 2018.05.18 [안드로이드] Thread and parallelism - 1 (0) 2018.04.03 안드로이드 앱 개발 관련 참고사이트 (0) 2018.02.13 [도전과제] 도전과제 2. 글자 수를 표시하는 SMS 입력 화면 (0) 2016.10.02 TextView(텍스트뷰)와 EditText(입력상자)의 다른 기능들 (0) 2016.10.01