💜 Retrofit2 의 동작 방식
1) 통신용 함수를 선언한 인터페이스 작성
2) Retrofit에 인터페이스를 전달
3) Retrofit이 통신용 서비스 객체 반환
4) 서비스의 통신용 함수를 호출한 후 Call 객체 반환
5) Call 객체의 enqueue() 함수를 호출하여 네트워크 통신 수행
//네트워크 통신 및 json파싱 라이브러리
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.8.6'
<uses-permission android:name="android.permission.INTERNET" />
interface ApiClientService {
@GET(BuildConfig.ENDPOINT_GET_PARK_INFO)
fun getParkInfo(): Call<ParkInfoModel>
}
object RetrofitClient {
val apiKey = BuildConfig.API_KEY
val url = BuildConfig.URL_PARK_INFO
val endPoint = BuildConfig.ENDPOINT_GET_PARK_INFO
val retrofit: Retrofit
get() = Retrofit.Builder()
.baseUrl(this.url)
.addConverterFactory(GsonConverterFactory.create())
.build()
// Retrofit 서비스 객체 생성
val service = RetrofitClient.retrofit.create(ApiClientService::class.java)
var url = BuildConfig.API_KEY + BuildConfig.endPointgetParkInfo
// 네트워크 통신 시도 - Call 객체 반환
val call = service.getParkInfo(url)
call.enqueue(object : retrofit2.Callback<ParkInfoModel> {
// 통신 성공
override fun onResponse(call: Call<ParkInfoModel>, response: Response<ParkInfoModel>) {
if (response.isSuccessful) {
val body = response.body()
if (body != null) {
if (body.getParkInfo.result.code == "INFO-000") {
Util.Toast(mContext, "통신 성공")
val rowList = body.getParkInfo.row
Util.Log("$rowList")
}
} else {
Util.Log("${response.body()}")
}
}
}
// 통신 실패
override fun onFailure(call: Call<ParkInfoModel>, t: Throwable) {
Util.Log("통신이 실패하였습니다." + t.message)
Util.Toast(mContext, "통신이 실패하였습니다." + t.message)
call.cancel()
}
})
로그 찍어보니 데이터를 잘 받아오는 것을 확인 ~.~