티스토리 뷰
https://thdbs523.tistory.com/376
Retrofit2에 대한 기본 개념과 구현 기초 셋팅, GET/POST 구현 방법은 위 포스팅에서 설명했다.
이번에는 PUT/DELETE 함수를 구현하는 방법에 대해 알아보자.
저번 포스팅과 동일하게 JSON 데이터는 아래 url을 활용한다.
https://jsonplaceholder.typicode.com/posts
API 구현
interface API {
@FormUrlEncoded
@PUT("/posts/{id}")
fun putPost(@Path("id") id: Int, @FieldMap param: HashMap<String, Any>): Call<Post>
@DELETE("/posts/{id}")
fun deletePost(@Path("id") id: Int): Call<Void>
}
- PUT
@FormUrlEncoded
@PUT("/posts/{id}")
fun putPost(@Path("id") id: Int, @FieldMap param: HashMap<String, Any>): Call<Post>
path로 전달한 id와 동일한 id를 가지는 데이터쌍을, parameter로 전달한 데이터로 변경한다.
https://jsonplaceholder.typicode.com/posts/1
처럼 path의 가장 뒤에 id를 전달하고, 변경할 데이터를 key-value 형태의 hashmap으로 전달한다.
그러면 반환값으로 변경된 데이터쌍이 Post 객체로 변형되어 반환된다.
여기서 path에 전달할 데이터는 @PUT("/posts/{id}") 처럼,
PUT 어노테이션 안에 {}로 넣는다.
그리고 함수의 파라미터에 @Path("id")를 통해 실제 path에 들어갈 데이터를 전달한다.
이 때 @PUT 경로의 {} 안 value와, @Path 안의 value의 이름이 동일해야 한다.
- DELETE
@DELETE("/posts/{id}")
fun deletePost(@Path("id") id: Int): Call<Void>
put과 동일하게, path로 전달한 id와 동일한 id를 가진 데이터쌍을 삭제한다.
이때도 @DELETE 어노테이션의 경로 {} 안에 전달할 데이터명을 넣고,
함수의 파라미터 @Path에 그 데이터를 전달한다.
DELETE는 응답값이 없기 때문에 반환값은 Call<Void>로 선언했다.
성공적으로 데이터를 삭제한 경우 응답코드가 200이 된다.
함수 직접 사용하기
- PUT
val map = HashMap<String, Any>()
map["title"] = "타이틀"
map["userId"] = 3
RetrofitBuilder.api.putPost(3, map).enqueue(object : Callback<Post> {
override fun onResponse(call: Call<Post>, response: Response<Post>) {
if (response.isSuccessful) {
Log.d(TAG, "putPost onResponse()")
val body = response.body()
Log.d(TAG, "userId: ${body?.userId}")
Log.d(TAG, "id: ${body?.id}")
Log.d(TAG, "title: ${body?.title}")
Log.d(TAG, "body: ${body?.body}")
}
}
override fun onFailure(call: Call<Post>, t: Throwable) {
Log.d(TAG, t.localizedMessage)
}
})
변경할 데이터는 미리 hashmap에 담아서 파라미터로 전달했다.
이 코드에서는 id가 1인 데이터의 title과 userId를 변경한다.
테스트를 위해 변경된 Post 객체의 값을 로그로 찍어봤다.
- DELETE
RetrofitBuilder.api.deletePost(5).enqueue(object : Callback<Void> {
override fun onResponse(call: Call<Void>, response: Response<Void>) {
if (response.isSuccessful) {
Log.d(TAG, "deletePost onResponse()")
Log.d(TAG, "response code : ${response.code()}")
}
}
override fun onFailure(call: Call<Void>, t: Throwable) {
Log.d(TAG, t.localizedMessage)
}
})
인자로 5를 전달했으므로 id가 5인 데이터를 삭제하는 코드가 될 것이다.
DELETE 함수는 응답값이 없고, 성공적으로 삭제된 경우에는 응답 코드가 200이 반환이 된다.
이 코드를 실행시켜보면 "response code : 200"이라는 로그가 찍히는 것을 확인할 수 있다.
'app > android' 카테고리의 다른 글
[안드로이드/코틀린] FCM를 이용하여 사용자 별로 Notification 보내기-2 (0) | 2023.10.16 |
---|---|
[안드로이드/코틀린] FCM를 이용하여 사용자 별로 Notification 보내기-1 (0) | 2023.10.16 |
[안드로이드/코틀린] Retrofit2 라이브러리로 JSON 데이터 다루기 (GET, POST) (0) | 2023.10.12 |
[안드로이드/코틀린] fragment에서의 데이터 바인딩 (0) | 2023.10.09 |
[안드로이드/코틀린] AlarmManager 개념 알아보고 구현하기 (0) | 2023.09.29 |