Polyglot's language & programming story.

Retrofit2) Retrofit2를 사용해서 데이터 통신을 쉽게 해보자. 본문

Programming/AndroidProgramming

Retrofit2) Retrofit2를 사용해서 데이터 통신을 쉽게 해보자.

Polyglot 2018. 7. 2. 16:02

안녕하세요. 오늘 포스팅 주제는 Retrofit2에 관해서 다뤄보겠습니다.


1.Retrofit이란?

Square사에서 만든 Restful하게 통신을 할 수 있는 오픈 라이브러리입니다.

Retrofit을 사용해서 HTTP 프로토콜을 @(어노테이션)을 이용해서 @GET, @POST, @DELETE 처럼 간단하게 메소드처리가 가능합니다.

또한 custom header 설정과 multipart request body 설정, 파일 다운로드와 업로드 등등 여러 강력한 기능을 제공합니다.


공식 문서 사이트 : http://square.github.io/retrofit/


오늘 포스팅의 목표 : 자신의 github repersitory 목록을 받아와서 리스트뷰에 출력하기!



<제 깃헙 파일 저장소 목록입니다.>


2. Retrofit2 를 사용해보기! (Dependencies 및 permission 설정)


Retroift2는 외부 라이브러리이기 때문에 Dependencies를 설정해주어야됩니다. 또한 통신을 위해서

Manifest.xml에서 permission을 설정해주어야 되지요.

이렇게 사용전에 permission과 dependencies를 설정해줍시다. 

참고로 retrofit2는 OkHttp를 네트워크 계층으로 사용하는데. retrofit2를 implement해서 추가하면 자동으로 OkHttp가 추가가 됩니다.


3. GithubAPI 정의하기

<인터페이스 정의 형식>

일단 인터페이스의 이름은 GithubAPI로 정의하고 GET 방식으로 github의 /users/HongyeongJu/repos로 접근해서 GithubRepos의 데이터를 받도록 정의합니다. 이때 HongyeongJu(저의 주소)가 아니라 파라미터로 받아서 대신 그 자리에 넣으려면 다음과 같이 바꿉니다.

{}를 사용해서 파라미터로 받은 변수로 {}괄호 안에 넣을 수가 있습니다. @Path는 메소드의 파라미터 변수는 {user}의 값과 똑같다라는 뜻입니다.

4. GitHubRepo POJO 클래스 정의하기

그럼 값을 받는 GitHubRepo POJO클래스를 정의해봅시다.

단순하게 변수가 하나뿐이고 getter만 있는 POJO 클래스입니다.


5.Builder 설정

Retrofit을 사용하려면 먼저 builder를 만들고 갖가지의 속성을 추가해야됩니다.
중요한 속성 값은 1. 서버의 URL 주소 2. 변환 타입 정의 입니다.
baseUrl를 통해서 접근하고자 하는 서버의 URL 주소를 입력하고.
addConverterFactory메소드를 통해 Gson(Java객체를 Json객체로 변환시키는 클래스)를 이용합니다.

6. Cilent 객체만들고 통신하기


아까 정의했던 인터페이스를 기준으로 retrofit.create()메소드를 통해서 인터페이스를 구현한 객체를 만듭니다.
이 객체를 통해서 메소드를 호출하여 통신을 할 수가 있는데.

reposForUser() 메소드에 접근하고자 하는 주소를 입력해서 연결을 시킵니다.
연결은 Call 클래스로 받으며 그 결과값은 List<GitHubRepo>형으로 받습니다.

7. 응답 처리하기


retrofit2에서는 응답 처리를 하기 위해서 비동기적 응답 처리 방법인 enqueue를 사용해서 응답을 받아냅니다.
onResponse는 응답이 성공할 때 자동 호출되고 onFailure는 응답이 실패하였을 때 자동으로 호출됩니다.

response.body()메소드를 통해서 응답 데이터의 내용을 받아낼 수 있습니다.

8. 전체 코드



MainActivity.java

activity_main.xml



참고 블로그


https://medium.com/@henen/빠르게-배우는-안드로이드-24-retrofit-dd16cd803938

https://jongmin92.github.io/2018/01/29/Programming/android-retrofit2-okhttp3/

https://futurestud.io/tutorials/retrofit-getting-started-and-android-client

Comments