retrofit활용하여 날씨api 받아오기

이동천·2022년 1월 9일

2022 self 프로젝트

목록 보기
1/2

먼저 날씨 데이터를 받아오기 위해서는 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가 마구잡이로 구성되어있어 이 코드를 더욱 간결하게 만들어줄 생각이다.

profile
안드개발자

0개의 댓글