๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] Retrofit - Post

interfacer_han 2024. 6. 11. 16:23

#1 ์ด์ „ ๊ธ€

 

[Android] Retrofit - ๊ธฐ์ดˆ

#1 ์ด์ „ ๊ธ€ [Android] Retrofit - ๋ฐฐ๊ฒฝ๊ณผ ๊ตฌ์กฐ#1 Restrofit์˜ ๋ฐฐ๊ฒฝ#1-1 REST API REST API (REpresentational State Transfer Application Programming Interface)#1 ๋ฌด์—‡(What)์— ๋Œ€ํ•œ API์ธ๊ฐ€?#1-1 ๊ฐœ์š”REST(REpresentational State Transfer) ๋˜๋Š”

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, ์„œ๋ฒ„์— Post ์š”์ฒญ์„ ํ•ด๋ณธ๋‹ค. (์ฐธ์กฐ: REST API)

#2 ์ฝ”๋“œ ์ˆ˜์ •

#2-1 AlbumService.kt

// package com.example.post

import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST


interface AlbumService {

    ...

    @POST("/albums")
    suspend fun uploadAlbum(@Body album: AlbumsItem): Response<AlbumsItem>
}

Post ์š”์ฒญ ๋˜ํ•œ ๋ฐ˜ํ™˜ํ˜•์ด ์กด์žฌํ•œ๋‹ค. ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ Post ์š”์ฒญ์ด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋๋Š”๊ฐ€์— ๋Œ€ํ•œ ์‘๋‹ต(Response)๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

#2-2 MainActivity.kt

...

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        val responseLiveData: LiveData<Response<AlbumsItem>> = liveData {
            val album = AlbumsItem(7, 12, "Post practice") // AlbumsItem ๊ฐ์ฒด๋ฅผ ํ•˜๋“œ ์ฝ”๋”ฉ
            val response = retrofitService.uploadAlbum(album)
            emit(response)
        }

        responseLiveData.observe(this, Observer {
            displayListOnScreen(textView, it)
        })
    }

    private fun displayListOnScreen(textView: TextView, response: Response<AlbumsItem>) {
        val item = response.body()

        if (item != null) {
            val result =
                "User id : ${item.userId}" + "\n" +
                "Album id : ${item.id}" + "\n" +
                "Album Title : ${item.title}" + "\n\n\n"

            textView.append(result)
        }
    }
}

LiveData Builder๋กœ ๋งŒ๋“  responseLiveData๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค. responseLiveData.observe ์†์— ์žˆ๋Š” displayListOnScreen()๋„ ์•Œ๋งž๊ฒŒ ์ˆ˜์ •ํ•œ๋‹ค.

#3 ์ž‘๋™ ํ™•์ธ

#2-2์—์„œ ๋งŒ๋“  Album ๊ฐ์ฒด์˜ Album id๋Š” 12์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด์งธ์„œ ์„œ๋ฒ„์— Post๋œ id๋Š” 101์ธ๊ฐ€? ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์˜ํ•œ id๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์•Œ์•„์„œ id๋ฅผ ํ• ๋‹นํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ id๋Š” ๊ฑฐ์˜ ๋ชจ๋‘ ์ž๋™ ์ฆ๊ฐ€(Auto Increment)๋œ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ธฐ๋ณธ ํ‚ค๋กœ์„œ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, User id๋Š” ๊ธฐ๋ณธํ‚ค๋„ ์•„๋‹ˆ๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” Column์ด๊ธฐ์— #2-2์—์„œ ์ •์˜ํ•œ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋˜์—ˆ๋‹ค.

#4 ์™„์„ฑ๋œ ์•ฑ

 

android-practice/retrofit/Post at master · Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com