코딩하는 일용직 노동자

안드로이드 Retrofit2 기초 사용법 본문

안드로이드

안드로이드 Retrofit2 기초 사용법

bacass 2022. 7. 23. 15:03

아주 기초적인 Retrofit2 사용법을 https://jsonplaceholder.typicode.com/posts 를 이용해 테스트해보는 방법을 알아보겠습니다.

#기본 셋팅
Retrofit2를 사용하기 위해 gradle에 의존성 주입을 해줍니다. Manifest 파일에 인터넷 퍼미션을 추가해줍니다.

// 의존성 추가
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

Manifest파일에 네트워크 기능을 이용하기 위한 퍼미션을 추가해줍니다.
<uses-permission android:name="android.permission.INTERNET"/>

 

#RetrofitClient.kt
BaseUrl 과 json 처리를 위한 GsonConverterFactory를 셋팅한 클래스입니다.

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitClient {
    private const val BASE_URL = "https://jsonplaceholder.typicode.com/" // 서버도메인URL
    private var retrofit: Retrofit? = null
    open val client: Retrofit?
        get() {
            if (retrofit == null) {
                retrofit = Retrofit.Builder()
                    .baseUrl(BASE_URL) // 접속할 서버를 설정
                    .addConverterFactory(GsonConverterFactory.create()) // json response를 파싱하기 위해 Gson을 설정
                    .build()
            }
            return retrofit
        }
}

 

#ApiService.kt
Api 호출함수를 인터페이스로 만듭니다.
아주 기초적인 방법을 알아보기 때문에 아래 소스가 간단하지만, Get방식 Post방식인지, 도메인 뒤에 나머지 경로, 호출에 사용할 파라메터, Response 받을 데이터의 형태에 때라 매우 복잡한 코딩도 가능합니다.

import retrofit2.Call
import retrofit2.http.GET

interface ApiService {
    @GET("posts")
    fun getPost(): Call<List<PostModel>>
}

 

#PostModel.kt
Model이란 서버 연동을 위한 데이터 추상화 클래스입니다.
Api호출 후 Response를 파싱할 데이터 클래스입니다.
@SerializedName 어노테이션을 이용하면 서버에서 받은 데이터의 이름과, 실제 저장할 데이타 클래스의 변수명을 따로 설정할 수 있습니다.
import com.google.gson.annotations.SerializedName

class PostModel {
    @SerializedName("userId")
    var userId: Int = 0

    @SerializedName("id")
    var id: Int? = 0

    @SerializedName("title")
    var title: String? = null

    @SerializedName("body")
    var body: String? = null
}

 

#MainActivity.kt
이제 api를 호출해 결과를 확인해보겠습니다.

private var retrofit = RetrofitClient.client

...

private fun startRetrofit() {
       val postApi = retrofit?.create(ApiService::class.java)
       postApi!!.getPost().enqueue(object : Callback<List<PostModel>> {
              override fun onResponse(call: Call<List<PostModel>>, response: Response<List<PostModel>>) {
                     if (response.isSuccessful) {
                            response.body()?.forEach {
                                   Log.d(TAG, "onResponse: ${it.userId}, ${it.title}")
                            }
                     }
              }

              override fun onFailure(call: Call<List<PostModel>>, t: Throwable) {
                     t.printStackTrace()
              }
       })
}

 

소스코드는 아래 github에 공개해두겠습니다.
https://github.com/Bacass/Retrofit2Basic