Skip to content

tnvnfdla1214/Leverage_external_resources

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

외부 리소스 활용(API 활용)

안드로이드를 개발하면서 날씨나 교통정보등 공공 데이터를 사용할 때가 있습니다.사용하는 방법에 대해서 기록해보겠습니다. 아래의 설명은 코로나 센터 서비스에 대한 기록입니다.

🔧 프로젝트 사용 사례


🍭 설명

API 신청하기

image image

gradle_properties 에 Key_ID 추가

image 이렇게 저장하는 이유는 key번호를 직접 꺼내지 않으므로서 관리하기도 쉽고 비밀로 하기 위해서입니다.

gradle_gradle(Module)에 API_KEY,API_SECRET 설정

image

Manifsst 에 meta-data 추가

image

url 오브젝트 설정

/*url.kr*/
object Url {
    const val BASE_URL = "https://api.odcloud.kr/api/15077586/v1/centers/"
}

API 데이터를 data 클래스로 Json -> kotlin 변경

image image

Hilt(DI)로 종속성 설정

/*APIModule.kr*/
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
    @Provides
    fun provideBaseUrl() = Url.BASE_URL
    @Singleton
    @Provides
    fun provideOkHttpClient() = if (BuildConfig.DEBUG) {
        val loggingInterceptor = HttpLoggingInterceptor()
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
        OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .build()
    } else {
        OkHttpClient.Builder().build()
    }
    @Singleton
    @Provides
    fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
        return Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl(provideBaseUrl())
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
    @Singleton
    @Provides
    fun provideApiService(retrofit: Retrofit): RetrofitInterface {
        return retrofit.create(RetrofitInterface::class.java)
    }
}

API에서 정보 받아오기

아래 예시는 Repository에서 받아오는 코드입니다.

/*ServiceRepository.kr*/
class ServiceRepositoryImpl (
    private val covidDao: CovidDao,
    private val api: RetrofitInterface,
    private val ioDispatcher: CoroutineDispatcher,
    private val mainDispatcher: CoroutineDispatcher
) : ServiceRepository {

    override suspend fun getCenterList(count: MutableLiveData<Int>) {
        val responseData: MutableLiveData<CentersApi> = MutableLiveData()
        for(i in 1..10){
            api.getCovidCenter(i + 1, 10).enqueue(object : Callback<CentersApi> {
                override fun onResponse(
                    call: Call<CentersApi>,
                    response: Response<CentersApi>
                ) {
                    if (response.isSuccessful) {
                        // code == 200
                        responseData.value = response.body()//결과값 받아오기
                        .
                        .
                }
                override fun onFailure(call: Call<CentersApi>, t: Throwable) {
                    //실패
                    Log.d("getCenterList", t.toString())
                    .
                    .
                }
            })
        }
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages