안드로이드를 개발하면서 날씨나 교통정보등 공공 데이터를 사용할 때가 있습니다.사용하는 방법에 대해서 기록해보겠습니다. 아래의 설명은 코로나 센터 서비스에 대한 기록입니다.
- 코로나 센서 서비스
- 공공데이터_코로나19 예방접종 센터_API
- 네이버 지도
- 배달의 민족 클론 코딩
- SK_위치기반 주변 음식점 정보_API
- 구글 지도
- Arbnb 프로젝트 클론 코딩
- 네이버 지도
- 깃허브 레파지토리 클론 코딩
이렇게 저장하는 이유는 key번호를 직접 꺼내지 않으므로서 관리하기도 쉽고 비밀로 하기 위해서입니다.
/*url.kr*/
object Url {
const val BASE_URL = "https://api.odcloud.kr/api/15077586/v1/centers/"
}
/*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)
}
}
아래 예시는 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())
.
.
}
})
}
}
}