Hello, Android!

Retrofit2를 이용한 HTTP통신 본문

Android

Retrofit2를 이용한 HTTP통신

lwndnjs93 2020. 5. 23. 17:32

안드로이드에서 HTTP통신을 할때 주로 사용하는 방법으로는 AsyncTask를 이용하는 방법과

Retrofit2 라는 라이브러리를 이용하는 방법이다

 

안드로이드는 UI를 제어하는 메인 쓰레드가 존재한다. 

UI변경은 메인 쓰레드에서만 가능하며 우리는 메인 쓰레드에 함부로 접근이 불가능하다

그렇기때문에 background 작업을 할때 AsyncTask를 이용하며

네트워크 통신에서도 AsyncTask 쓰레드를 만들어 네트워크 통신을 해야 한다

 

하지만 네트워크 통신을 더욱 편리하게 해주는 라이브러리인 Retrofit2 라이브러리가 있다

이번에는 Retrofit2를 이용하여 github에서 제공하는 API를 호출해 보겠다

https://developer.github.com/v3/repos/#list-repositories-for-a-user

 

Repositories

Get started with one of our guides, or jump straight into the API documentation.

developer.github.com

github에서 제공하는 API중에 2번에 있는 사용자의 레포지토리 목록을 취득하는 API를 호출하겠다

GET 방식이며 /users/:username/repos 이다

 

1. 우선 앱 레벨의 gradle에 Retrofit에 관련된 의존성을 추가해야한다

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

버전은 상황에 맞는 최신 버전으로 명시한다

 

2. 인터넷이 필요하기 때문에 인터넷 권한을 manifest에 등록한다

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

 

3. 사용하고자 하는 API를 인터페이스로 정의한다

레트로핏은 GET, POST, PUT을 전부 지원한다

이번에 사용하는 API에 유저ID를 중간에 인자값으로 넣어야 한다

인터페이스 함수의 매개변수에 (@Path("user") 매개변수명 : 타입) 의 형식으로 정의하면 id가 API의 {users}가 된다 

 

4. API의 기본 URL과 데이터를 파싱할 GsonConverter를 지정한다

 

5. API를 호출하는 곳에서는 컴패니언 객체로 service를 사용하여 API를 호출한다

MainActivity 화면에서는 editText, button, textview가 존재하며

버튼 클릭 이벤트가 발생하면 editText에 입력한 텍스트를 취득하여 API매개변수로 넘겨 호출한다

호출에 성공하여 응답을 받았으면 그 데이터를 textview에 출력한다

 

만약 실행중 에러가 발생하였고

java.lang.SecurityException: Permission denied (missing INTERNET permission?)

와 같은 문구가 로그캣에 있다면 인터넷 접속 권한에 관한 문제이니

2번에서 설명한 퍼미션을 다시한번 확인해야한다

 

이번에는 레트로핏2를 이용하여 간단하게 GitHub에서 제공하는 GET방식의 API를 호출하였다

레트로핏에 관한 더 많은 정보는 레트로핏 공식 문서를 참조하기 바란다

https://square.github.io/retrofit/

'Android' 카테고리의 다른 글

테드 퍼미션을 이용한 권한 획득  (0) 2020.05.31
안드로이드 권한 요청  (0) 2020.05.24
안드로이드 shared preferences  (0) 2020.05.17
05. 인텐트, 뷰 in kotlin  (0) 2019.03.11
04. 뷰  (0) 2019.03.10