Retrofit

REST통신을 위한 라이브러리
REST통신에는 GET, POST, PUT, DELETE 이렇게 4가지 종류의 메소드가 있고 Retrofit에는 이에 똑같이 4개의 메소드와 HEADER메소드로 총 5개가 있다.
여기서는 GET과 POST만 예로 든다.

Retrofit 사용법

UserInfo를 서버에서 GET하고 POST하는 방법을 예시로 들어 설명하겠다.

먼저 서버와 통신할 때 필요한 UserInfo라는 data class를 만들어야 한다.

1
2
3
4
5
6
data class UserInfo(
    @SerializedName("name")
    var name: String, 
    @SerializedName("age")
    var age: String
)

@SerializedName은 서버에 저장된 이름과 data class의 변수명이 다를 경우에 서버에서의 이름을 명시해 주는 것이다.

이제 Retrofit을 사용하기 위해서는 인터페이스만 잘 다루면 된다.
인터페이스를 다음과 같은 세 단계로 활용한다.

  1. 인터페이스 설계
  2. 인터페이스 연결
  3. 인터페이스 사용

1. 인터페이스 설계

1
2
3
4
5
6
7
interface UserInfoRetrofit{
    @POST("users/{id}")
    fun postUserInfo(@Path("id") id:String, @Body userInfo : UserInfo) : Call<UserInfo>

    @GET("users/{id}")
    fun getUserInfo(@Path("id") id : String) : Call<UserInfo>
}

users아래에 id를 기준으로 user들이 저장되어 있다고 보면 된다. id는 동적으로 바뀌어야 하기 때문에 중괄호로 감싼 뒤{id}
@Path(“id”) id : String을 통해 동적으로 받아서 넘겨줄 수 있다.
저장될 내용은 @Body로 명시한다.

2. 인터페이스 연결

1
2
3
4
5
6
val retrofit : Retrofit = Retrofit.Builder().
        baseUrl("www.example.com").
        addConverterFactory(GsonConverterFactory.create()).
        build()
    
val userInfoRetrofit : UserInfoRetrofit = retrofit.create(UserInfoRetrofit::class.java)

3. 인터페이스 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
val userInfo = UserInfo("gyu","100")

userInfoRetrofit.postUserInfo("123",userInfo).enqueue(object: Callback<UserInfo> {
                override fun onResponse(call: Call<UserInfo>, response: Response<UserInfo>) {
                    if(response.isSuccessful){
                        Log.d("Post","success ${response}")
                    }
                    else {
                        Log.d("Post", "success,but ${response.errorBody()}")
                    }
                }

                override fun onFailure(call: Call<UserInfo>, t: Throwable) {
                    Log.d("Post","fail ${t}")
                }
            })
        }

레트로핏 특징

안드로이드는 메인 스레드에서 IO작업이나 내부 디비에 접속하는 작업을 하면 에러를 내뱉는다. 따라서 새로운 작업 단위를 만들어서 IO 작업을 해야하는데 레트로핏은 내부적으로 알아서 처리해준다.

댓글남기기