코틀린 Retrofit 사용법
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. 인터페이스 설계
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 작업을 해야하는데 레트로핏은 내부적으로 알아서 처리해준다.
댓글남기기