기본 틀
RetrofitClient.kt
/**
* 싱글턴 레트로핏 객체
*/
object RetrofitClient {
private var retrofitClient: Retrofit? = null
/**
* 레트로핏 클라이언트 가져오기
*
* Parameter
* baseUrl: API 연결 시 사용하는 기본 주소 http://wwww.naver.com/ 과 같은 주소
* Return
* 레트로핏 객체
*/
fun getClient(baseUrl: String): Retrofit? {
Log.d(TAG, "getClient() 호출 됨")
// TODO:: OkHttp 인스턴스생성
// TODO:: 인터셉터 추가하기
// TODO:: 레트로핏 객체 생성하기
// TODO:: 레트로핏 객체 반환하기
}
}
IRetrofit.kt
/**
* API 연결하는 인터페이스
* 메서드를 이용하여 API 콜을 만들게 된다.
*/
interface IRetrofit {
// TODO:: API 연결을 위한 메서드 정의
}
RetrofitManager.kt
/**
* 레트로핏 관리 클래스
* API 에 연결하여 데이터를 받아오는 역할을 한다.
*/
class RetrofitManager {
/**
* 레트로핏 관리 클래스 싱글턴 구현
*/
companion object {
private var instance: RetrofitManager? = null
/**
* 레트로핏 매니저 객체 얻기
* Return
* 레트로핏 매니저 객체
*/
fun getInstance(): RetrofitManager =
instance ?: synchronized(this) {
instance ?: RetrofitManager().also { instance = it }
}
}
// TODO:: 레트로핏 인터페이스 가져오기
private val iRetrofit: IRetrofit? = RetrofitClient.getClient(BASE_URL).create(IRetrofit::class.java)
// TODO:: API 호출 메서드 구현
}
기본 구현
RetrofitClient.kt
/**
* 싱글턴 레트로핏 객체
*/
object RetrofitClient {
private var retrofitClient: Retrofit? = null
/**
* 레트로핏 클라이언트 가져오기
*
* Parameter
* baseUrl : API 연결 시 사용하는 기본 주소 http://wwww.naver.com/ 과 같은 주소
*
* Return
* 레트로핏 객체
*/
fun getClient(baseUrl: String): Retrofit? {
Log.d(TAG, "getClient() 호출 됨")
// TODO:: OkHttp 인스턴스생성
val okHttpClient = OkHttpClient.Builder()
// TODO:: 인터셉터 추가하기
// TODO:: 레트로핏 객체 생성하기
if (retrofitClient == null) {
retrofitClient = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
// TODO:: 레트로핏 객체 반환하기
return retrofitClient
}
}
IRetrofit.kt
/**
* API 연결하는 인터페이스
* 메서드를 이용하여 API 콜을 만들게 된다.
*/
interface IRetrofit {
// TODO:: API 연결을 위한 메서드 정의
@GET("bbs/list")
fun searchList(@Query("query") searchTerm: String): Call<JsonElement>
}
RetrofitManager.kt
/**
* 레트로핏 관리 클래스
* API 에 연결하여 데이터를 받아오는 역할을 한다.
*/
class RetrofitManager {
/**
* 레트로핏 관리 클래스 싱글턴 구현
*/
companion object {
private var instance: RetrofitManager? = null
/**
* 레트로핏 매니저 객체 얻기
* Return
* 레트로핏 매니저 객체
*/
fun getInstance(): RetrofitManager =
instance ?: synchronized(this) {
instance ?: RetrofitManager().also { instance = it }
}
}
// TODO:: 레트로핏 인터페이스 가져오기
private val iRetrofit: IRetrofit? = RetrofitClient.getClient("https://qwer.asdf.com/")?.create(IRetrofit::class.java)
// TODO:: API 호출 메서드 구현
/**
* 검색 API
* Parameter
* searchTerm: 검색어
* completion: 비동기 작업 후 할 일
*/
fun searchList(searchTerm: String?, completion: (String) -> Unit) {
// TODO:: Http Call 만들기
val call = iRetrofit?.searchList(searchTerm?:"") ?: return
// TODO:: API 서버에 요청 보내기
call.enqueue(object : Callback<JsonElement> {
override fun onFailure(call: Call<JsonElement>, t: Throwable) {
TODO("Not yet implemented")
}
override fun onResponse(call: Call<JsonElement>, response: Response<JsonElement>) {
// TODO:: 결과 데이터 파싱하기
// TODO:: API 결과로 필요한 데이터 넘기기
response.body()?.let {
completion(it.toString())
}
}
})
}
}