이것저것 다 개발

[Android] OpenWeatherMap 날씨 API 사용 앱 만들기 본문

Android

[Android] OpenWeatherMap 날씨 API 사용 앱 만들기

용용개발 2018. 5. 28. 13:21

OpenWeatherMap을 이용한 날씨 APP을 만들어보겠습니다.

사용한 라이브러리는 Http 통신을 위해 Retrofit2을 사용하였습니다.

먼저 OpenWeatherMap에 회원가입을 하고 API 호출을 위한 Key가 필요합니다.


https://openweathermap.org/


Key를 얻었다면 안드로이드 프로젝트를 만들고 AndroidManifest.xml에 Internet Permission을 주겠습니다.

<uses-permission android:name="android.permission.INTERNET" />

다음으로 Retrofit2를 Dependency로 추가하겠습니다.

compile 'com.squareup.retrofit2:retrofit:2.4.0'
compile 'com.squareup.retrofit2:converter-gson:2.4.0'

http://yongyi1587.tistory.com/31 << Retrofit2 사용해보기

이전 글에서 설명한 Retrofit을 기반으로 RetoriftClient를 만들고 baseUrl을 설정해줍니다.

http://api.openweathermap.org/data/2.5/weather?lat=[latitude]&lon=[longitude]&APPID=[OPEN_WEATHER_MAP_KEY]

val retrofit: Retrofit? = Retrofit.Builder()
.baseUrl("http://api.openweathermap.org/data/2.5/")
.addConverterFactory(GsonConverterFactory.create())
.build()

다음으로 RetoriftService에 API를 선언해줍니다.

@GET("weather?")
fun getCurrentWeather(
@Query("lat") lat: String,
@Query("lon") lon: String,
@Query("APPID") APPID: String)
: Call<JsonObject>

OpenWeatherMap에는 여러가지의 날씨관련 API가 있으나

이 글에서는 latitude와 longitude를 기반으로 현재 위치의 날씨를 얻어오겠습니다.

fun getCurrentWeather() {
var res: Call<JsonObject> = RetrofitClient
.getInstance()
.buildRetrofit()
.getCurrentWeather(latitude, longitude, OPEN_WEATHER_MAP_KEY)

res.enqueue(object: Callback<JsonObject> {

override fun onFailure(call: Call<JsonObject>, t: Throwable) {
Log.d(TAG, "Failure : ${t.message.toString()}")
}

override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
var jsonObj = JSONObject(response.body().toString())
Log.d(TAG , "Success :: $jsonObj")

}
})
}

Retrofit2를 이용한 Http 요청으로 latitude, longitudem, key 세가지를 parameter로 request 합니다.

response는 JsonObject로 받게되고 파싱 후 화면에 뿌려주면 간단한 날씨앱이 완성됩니다.



위 화면은 현재 날씨와 시간별 날씨 API 두 가지를 호출하여 간단하게 만들어본 화면입니다.

추가적으로 Glide와 MpChart 라이브러리를 이용하여 날씨를 이미지와 그래프로 표현해봤습니다.


## 위 코드는 코틀린으로 코딩된 소스입니다 ##

'Android' 카테고리의 다른 글

[Android] ProgressDialog 사용하기  (0) 2018.07.13
[Android] ConstraintLayout  (0) 2018.06.12
[Android] Retrofit2 사용해보기  (2) 2018.05.25
[Android] MVC Pattern  (0) 2018.04.26
[Android] Kotlin Anko 간단하게 사용해보기  (0) 2018.04.06
Comments