기본 틀

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())
                }
            }
        })
    }
}

 

안드로이드 UI 작업

안드로이드 애니메이션 작업

  • lottie animation (오픈소스 라이브러리) lottifiels.com

더미 데이터

Material Components Android

리사이클러 뷰

기억할 것

  • 오픈 소스 사용시 꼭 문서를 봐야한다.

awesome android

awesome android ui

awesome kotlin

무료 아이콘 검색

Material Design 2

영어 단어 검색

  • the free dictionary

로그캣 필터가 안보일 때

  • 우측하단 EventLog 를 클릭하면 나타나게 되는 경우가 있다

더보기

https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

로깅 인터셉터

레트로핏 클라이언트를 하나 만들어서 서버와 api 통신을 하게 되는데 이 때 인터셉트를 하는 것이다.
인터(중간)셉트(잡다) 중간에 잡아서 처리하는 것.

  1. 기본 매개 변수: 위치 정보(허용했다면), 기종(ios, android) 등
  2. 통신 중간에 로그를 확인하는 인터셉터를 둔다.
    모든 정보를 볼 수 있다. 헤더, 바디.

코틀린에서는 함수의 파라미터에 디폴트 값을 정할 수 있습니다. 이런 기능은 자바에서는 지원하지 않았던 기능입니다.

그래서 코틀린에서 만든 메소드를 자바에서 사용하게 될 때 문제가 발생할 수 있는데, @JvmOverloads라는 어노테이션을 이용하여 해결할 수 있습니다. 

 

@JvmOverloads라는 어노테이션을 적용하면 모든 경우의 메소드를 만들어주게 됩니다.

 

'Android' 카테고리의 다른 글

@JvmOverloads  (0) 2020.12.15
[Android] 키패드에 따른 화면변경 설정하기  (0) 2020.04.20
[Android] 테스트  (0) 2020.04.11
[Android] Gradle  (0) 2020.04.10
[Android] ContentProvider, Service, BroadcastReceiver  (0) 2020.04.03

+ Recent posts