본문 바로가기

[UMC/Android] 9주차 - Open API 활용

@hyeon.s2022. 12. 2. 20:30

9주차 - Open API 활용

🧙‍♀️ Retrofit2 를 이용해 OpenAPI 연동

- 주간 박스오피스 API로 Recyclerview 구현

  • retrofit을 build 하는 부분을 전역적으로 사용할 수 없을까? 에 대한 궁금증 발생
    • 싱글톤 패턴을 이용하면 activity마다 build 할 필요없이 전역적으로 사용 가능하다!
object RetrofitService {
    private const val BASE_URL = "" //받아올 URL 을 넣어주면 된다. 

    val retrofit:Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()
} // 다음과 같이 만들어 전역적으로 활용함.
data class Movie(
    @SerializedName("boxOfficeResult")
    var boxofficeResult:BoxOfficeResult
)

data class BoxOfficeResult(
    @SerializedName("boxofficeType")
    var boxofficeType: String,
    @SerializedName("showRange")
    var showRang: String,
    @SerializedName("yearWeekTime")
    var yearWeekTime:String,
    @SerializedName("weeklyBoxOfficeList")
    var weeklyBoxOfficeList : List<WeeklyBoxOfficeList> = arrayListOf()
)

data class WeeklyBoxOfficeList (
    @SerializedName("rnum")
    var rnum: String?, //순번
    @SerializedName("rank")
    var rank : String?, //박스오피스 랭킹
    @SerializedName("movieNm")
    var movieNm: String?, //영화이름
    @SerializedName("openDt")
    var openDt: String?, //개봉일
    @SerializedName("audiAcc")
    var audiAcc: String?, //누적 관객수
)
  • 유의: 이름과 자료형을 잘 맞추지 않으면 null 값이 들어오는 경우가 발생한다.
  • 데이터 받는 부분
val retrofit = RetrofitService.retrofit
        retrofit.create(RetrofitAPI::class.java).getMovie(keyValue,0,20220101,10)
            .enqueue(object : Callback<Movie> {
                override fun onResponse(call: Call<Movie>, response: Response<Movie>) {
                    Log.e("Success",response.body().toString())
                    val dataList = response.body()?.boxofficeResult?.weeklyBoxOfficeList
                    initAdapter(dataList) // 받은 값의 리스트들을 RVAdapter에 넣어줬다.
                }

                override fun onFailure(call: Call<Movie>, t: Throwable) {
                    Log.e("Failure",t.message.toString())
                }
            })

실제로 받은 데이터들의 모습을 Log로 찍어봤다. (Log.e인 이유는 눈에 잘 보이기 위함.)

-영화인 검색 API : 감독 박찬욱 검색

  • 위와 같은 방식으로 영화인 검색 API를 활용한 결과이다.
hyeon.s
@hyeon.s :: 개발로그
목차