먼저 날씨 데이터를 받아오기 위해서는 https://data.kma.go.kr/api/selectApiDetail.do 이곳에 접속해 키를 발급받아야 한다. 그외 사용법은 사이트에서 제공해주고 있다.
이제 Retrofit를 활용해 api를 받아보기로 한다.
먼저 다음 코드를 모듈단위 그래들 dependencies에 추가해 준다.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
기본적인 코드형태는 https://square.github.io/retrofit/ 를 참고하면 된다.
private lateinit var weatherService : WeatherService
val retrofit = Retrofit.Builder()
.baseUrl(BaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
weatherService = retrofit.create(WeatherService::class.java)
weatherService.getCurrentTemp()
.enqueue(object : Callback<Type>{
override fun onResponse(call: Call<Type>, response: Response<Type>) {
if(response.isSuccessful.not()){
Log.e("failure","fail")
return
}else{
Log.e("success","success")
}
response.body()?.response?.body?.items?.let{
it.WeatherData.forEach{temp ->
if(temp.category.equals("T1H")){
binding.tempTV.text = temp.Temp
return@let
}
}
}
}
override fun onFailure(call: Call<Type>, t: Throwable) {
Log.e("failed",t.toString())
}
})
WeahterService.kt
interface WeatherService {
@GET("/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst")
fun getCurrentTemp(
@Query("serviceKey") key:String,
@Query("pageNo") no:String,
@Query("numOfRows") rows:String,
@Query("dataType") type:String,
@Query("base_date") Today:String,
@Query("base_time") Time:String,
@Query("nx") X_position:String,
@Query("ny") y_position:String
): Call<TempResponse>
}
이런식으로 구성해주었다.
현재 mainActivity가 마구잡이로 구성되어있어 이 코드를 더욱 간결하게 만들어줄 생각이다.