Kotlin

[Kotlin] Retrofit2 연결

eulBlue 2023. 8. 8. 12:55

📱테스트 환경

Samsung Galaxy Android 13 • Android 10


😢 내가 겪은 문제

내가 만든 API 를 연결하려고 찾아보다가 Retrofit2 를 찾았다. 근데 이걸 어떻게 하는지 구글에 검색해서 따라해 보려고했는데

와... 내 머리로는 이해하기도 쉽지 않았고, 내 프로젝트에서 따라하려고 해도 오류 투성이였다...

그래서 강의도 결제하고 , 검색해서 나에게 필요한 정보만 가져와다가 어떻게 되긴 됐다... ^^

 

Build.gradle ( Module :app )

// retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
// Gson 변환기
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.picasso:picasso:2.71828'

필요한걸 넣어준 다음에 Sync Now 클릭

 

RetrofitClient.kt

object RetrofitClient {
    private const val BASE_URL = "https://기본주소/" // 서버의 기본 URL을 입력합니다.
    val gson = GsonBuilder().setLenient().create()
    private val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build()

    val apiService: ApiService = retrofit.create(ApiService::class.java)
}

나는 이걸 utils 폴더 안에 저장해놓고 불러다가 썼다.

원래 웹개발을 하던 습관이 있어서 그런지 이 폴더구조가 맞는지는 나도 잘 모른다...

그냥 코드만 이해하면 될 것 같다...

 

ApiService.kt

data class Person(
    val name: String
)

interface ApiService {
    @GET("/뒤에 붙는 주소") // 예시: 서버에서 사용자 정보를 가져오는 API
    fun getPerson(): Call<Person> // User는 서버에서 받아올 데이터의 모델 클래스입니다.
}

RetrofitClient 에서 기본적인 주소 을 넣어줬으니 여기서는 뒤에 붙는 것만 넣어주면된다.

예를 들어서 /hello 같은 주소만 넣어주면 https://기본주소/hello 로 연결돼서 호출할 수 있다.

@GET("/뒤에 붙는 주소") // 예시: 서버에서 사용자 정보를 가져오는 API

API 를 호출하고 getPerson 을 통해 데이터 정보값을 받아올 수 있다 !!

fun getVersion(): Call<Person>

MainActivity.kt

RetrofitClient.apiService.getVersion().enqueue(object : Callback<Version> {
    override fun onResponse(call: Call<Person>, response: Response<Version>) {
        if (response.isSuccessful) {
            val person = response.body()
            if (person != null) {
                Log.d("qwer", "$person")
            }
        }
    }

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

API 호출하면 onResponse 로 넘어간다. 여기서 호출에 성공하면 response.isSuccessful 조건을 통해 이것저것 해볼 수 있다!!

실패했을 경우에는 onFailure 로 넘어가는데, 에러 로그를 통해서 해결하면된다!!

 

나같은 경우에는 onFailure 로 넘어가면 대부분이 데이터 타입이 안맞아서 발생하는 오류였다.

그러니 데이터 타입을 꼭!! 확인하자 ^^