Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 빌드 프로세스
- appbar
- 뷰바인딩
- 두 수의 나눗셈
- padding
- Widget
- 람다식
- 프래그먼트
- Flutter
- spacer
- SizedBox
- StatelessWidget
- 인스턴스
- 리스트뷰
- 변수
- 지연초기화
- 패스트캠퍼스
- 추상메소드
- expanded
- 안드로이드 스튜디오
- 반복문
- 액티비티 생명주기
- If
- 상속
- 프로그래머스
- StatefulWidget
- setState
- Kotlin
- margin
- button
Archives
- Today
- Total
Y_Ding
미세먼지 확인 앱 만들기 본문
도시와 지역을 선택하면 그 지역의 미세먼지 상태를 알려주는 앱 만들기
미세먼지 데이터를 어디서 가져올까?
- 공공데이터포털(https://www.data.go.kr) 이용
- 여기서 수신된 JSON 데이터를 가공
- 검색창에 '미세먼지' 입력 후 '오픈API' 클릭
- 이번 실습에서 사용할 데이터는 '한국환경공단_에어코리아_대기오염정보'
- '활용신청' 클릭 후 신청한 목적 등 사유를 입력한 후 승인을 받아야 데이터 사용이 가능
- serviceKey 란에 일반 인증키(Decoding) 붙여넣은 후 '미리보기'를 클릭하면 데이터를 미리 볼 수 있음
- 미리보기로 데이터를 확인했을 때 데이터가 라인별로 정리되어있지 않아서 보기가 어렵다면?
- https://jsonformatter.curiousconcept.com/# 활용하면 보기 쉬움!
Request Parameter
- 아래 이미지와 같이 데이터 포털에서 요청 변수를 확인할 수 있음
- API 서비스명은 서비스 URL
- 세부 옵션은 '요청 주소'로 확인 가능
- '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/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 | 버전 |
여기까진 '미세먼지 앱'을 만들기 전 필요한 데이터를 어디서 받아와야 할까? 에 대한 정보였다.
이제 위의 데이터들을 활용해서 앱을 만들어야 한다.
벌써부터 어지럽지만 아직 시작도 안했다는 사실🙄
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 |