Y_Ding

미세먼지 확인 앱 만들기 본문

TodayILearned/Android&Kotlin

미세먼지 확인 앱 만들기

YJ_ILY 2023. 9. 18. 20:52

도시와 지역을 선택하면 그 지역의 미세먼지 상태를 알려주는 앱 만들기

미세먼지 데이터를 어디서 가져올까?

  • 공공데이터포털(https://www.data.go.kr) 이용
  • 여기서 수신된 JSON 데이터를 가공
  • 검색창에 '미세먼지' 입력 후 '오픈API' 클릭
  • 이번 실습에서 사용할 데이터는 '한국환경공단_에어코리아_대기오염정보'
  • '활용신청' 클릭 후 신청한 목적 등 사유를 입력한 후 승인을 받아야 데이터 사용이 가능

시도별 실시간 측정정보 조회 후 활용신청

  • serviceKey 란에 일반 인증키(Decoding) 붙여넣은 후 '미리보기'를 클릭하면 데이터를 미리 볼 수 있음
  • 미리보기로 데이터를 확인했을 때 데이터가 라인별로 정리되어있지 않아서 보기가 어렵다면?

Request Parameter

https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey=YBZfZVJMj1yF6gVroDHjfOwdMCo%2Baq87JOXQOC4lPccAi6ekELdgoIA7n4f4zVIiQcOVls%2FSVg1pEC39CVbmsA%3D%3D&returnType=json&numOfRows=50&pageNo=1&sidoName=서울&ver=1.0
https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/ API 서비스명
getCtprvnRltmMesureDnsty?   세부 옵션(시군구별 실시간 평균정보 조회)
&serviceKey=YBZfZVJMj1yF6gVroDidoName… 인증키
&returnType=json 결과 데이터 유형
&numOfRows=50  한페이지 결과수
&pageNo=1 페이지 번호
&sidoName=서울 시도 이름(서울,부산,대구,인천….)
&ver=1.0   버전

Request Parameter
API서비스명과 세부 옵션(시도별 실시간 평균정보 조회)

여기까진 '미세먼지 앱'을 만들기 전 필요한 데이터를 어디서 받아와야 할까? 에 대한 정보였다.

이제 위의 데이터들을 활용해서 앱을 만들어야 한다.

벌써부터 어지럽지만 아직 시작도 안했다는 사실🙄

Android 앱 개발하기

http  통신을 편하게 하기 위한 라이브러리 'retrofit'

  • 안드로이드에서 REST api 통신을 지원하기 위한 라이브러리
  • Call 인터페이스의 enqueue를 통해 비동기 구현 가능
  • enqueue를 이용하지 않고 rxjava, rxkotlin을 사용하여 비동기 처리도 가능
  • Gson :
    • Json 데이터를 가공하는데 있어 효율적으로 관리할 수 있도록 도와주는 라이브러리
    • Google에서 제공하는 Json : Gson
  • retrofit을 이용해서 통신되는 부분 (NetWorkClient.kt / NetWorkInterface.kt)

NetWorkInterface.kt

interface NetWorkInterface {
    @GET("getCtprvnRltmMesureDnsty") //시도별 실시간 측정정보 조회 주소
    // String 안에는 요청값들이 들어감 (서비스키, 데이터표출방식, 페이지 번호...)
    // : Dust (data class의 내용 그대로 리턴 받을 거야!)
    suspend fun getDust(@QueryMap param: HashMap<String, String>): Dust
}

Gradle에 라이브러리 추가

	implementation 'com.google.code.gson:gson:2.10.1'
	implementation 'com.squareup.retrofit2:retrofit:2.9.0'
	implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
	implementation 'com.squareup.okhttp3:okhttp:4.10.0'
	implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'

	implementation "com.github.skydoves:powerspinner:1.2.6"

Menifest.xml

  • http통신을 위해 인터넷 사용권한이 추가로 필요
<uses-permission android:name="android.permission.INTERNET"/>

Dust.kt

  • 출력 결과에 대해서는 data class로 따로 빼줌

데이터 미리보기 했을 때의 결과물

data class DustBody(
    val totalCount: Int,
    @SerializedName("items")
    val dustItem: MutableList<DustItem>?,
    val pageNo: Int,
    val numOfRows: Int
)

totalCount, dustItem, pageNo, numOfRows 의 상수명은 미리보기에 나온 그대로 써줘야 함
조금이라도 틀리면 안돼!!!!!!!!!!!!!!!!!!!!!!

activity_main.xml

<com.skydoves.powerspinner.PowerSpinnerView

Spinner를 쓰면 클릭했을 때 리스트를 띄워줌
예를 들어, 도시 버튼 클릭했을 때 서울,경기,강원... 나오게!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

미세먼지 등급에 따라서 아이콘이 변경될 수 있도록 설정해주기

  • 미세먼지 수치만 봐서는 좋은건지, 나쁜건지 알기 어렵기 때문에 등급에 따라서 아이콘이 바뀌도록 설정

 

 

'TodayILearned > Android&Kotlin' 카테고리의 다른 글

AlldayFit 팀프로젝트  (0) 2023.11.01
클래스와 생성자  (1) 2023.09.19
코틀린 이해하기  (0) 2023.09.14
구글 지도앱 만들기  (2) 2023.09.14
사용자 위치 얻기  (0) 2023.09.14