[Android] Retrofit2를 이용하여 환율 데이터 받아오기


환율 정보 API

https://www.data.go.kr/data/3068846/openapi.do

 

한국수출입은행 환율 정보

환율 DB

www.data.go.kr

위의 링크에서 API 인증키를 발급받았다.

인증키를 이용해서 테스트를 해보면, 아래와 같은 결과가 나온다.

요청 변수

출력 결과


의존성 추가

버전 확인

https://github.com/square/retrofit

 

GitHub - square/retrofit: A type-safe HTTP client for Android and the JVM

A type-safe HTTP client for Android and the JVM. Contribute to square/retrofit development by creating an account on GitHub.

github.com

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

권한 추가 (인터넷)

<uses-permission android:name="android.permission.INTERNET"/>

데이터 클래스 생성

결과로 받아올 데이터를 정리합니다. 필요한 데이터만 작성하겠습니다.

import com.google.gson.annotations.SerializedName

data class Exchange(
    @SerializedName("result") val result : String,
    @SerializedName("cur_unit") val unit : String?,
    @SerializedName("ttb") val ttb : Double?,
    @SerializedName("tts") val tts : Double?,
    @SerializedName("deal_bas_r") val deal : Double?,
    @SerializedName("cur_nm") val name : String?
)

클라이언트 생성

이 때 response의 결과를 HttpLoggingInterceptor 추가하여 쉽게 확인할 수 있도록 하였다.

import com.shino72.exchangecal.service.ExchangeService
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object ExchangeClient {
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
        .build()

    val retrofit = Retrofit.Builder()
        .baseUrl("https://www.koreaexim.go.kr/site/program/financial/")
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClient)
        .build()

    val exchangeService : ExchangeService by lazy { retrofit.create(ExchangeService::class.java) }

}

서비스 생성

interface ExchangeService {
    @GET("exchangeJSON?authkey=${API_KEY.API_KEY}")
    fun getRespos(
        @Query("searchdate") searchdate : String,
        @Query("data") data : String,
    ) : Call<List<Exchange>>
}

확인

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.shino72.exchangecal.R
import com.shino72.exchangecal.client.ExchangeClient
import com.shino72.exchangecal.model.Exchange
import com.shino72.exchangecal.service.ExchangeService
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        getEx("20230117")
    }

    private fun getEx(date : String)
    {
        val ExchangeClient = ExchangeClient
        ExchangeClient.exchangeService.getRespos(date, "AP01").enqueue(object : Callback<List<Exchange>>{
            override fun onResponse(call: Call<List<Exchange>>, response: Response<List<Exchange>>) {

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

            }
        })
    }
}

결과

잘 받아와지는 것을 확인할 수 있다. 다음은 이 데이터를 활용하여 환율 계산기를 제작해보려고 한다.

(2023_01_30일자 환율 계산기 완성 - https://github.com/Myeongcheol-shin/exchangeCal)