일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩테스트
- 최단경로
- Android Studio
- top-down
- 다익스트라
- 우선순위큐
- onclick
- 엔테크서비스
- 거쳐가는 정점
- dto
- Java
- 직무면접
- 플로이드 와샬
- Python
- compiler
- BufferedReader
- disjoint set
- spring boot
- kmeans
- 음수가 포함된 최단경로
- 동적계획법
- Django
- bottom-up
- 벨만 포드 알고리즘
- 기술면접
- union-find
- Controller
- 유니온 파인드
- clean code
- scikit-learn
- Today
- Total
춤추는 개발자
[Android Studio] 공공데이터를 활용한 버스노선 앱 만들기 본문
다음은 공공데이터 Open API를 활용하는 방법으로 아래 사이트에서 회원가입, 인증키를 받는 과정은 생략하겠습니다.
1. 공공데이터 Open API
위 사이트는 공공기관에서 제공하는 공공데이터로 누구나 쉽고 편리하게 사용할 수 있으며 파일 데이터, Open API, 시각화 등 다양한 방식으로 제공됩니다. 본 예제에서는 Open API의 인증키를 받아 [노선정보조회 서비스]라는 Open API를 활용해보도록 하겠습니다.
1. 검색할 노선번호 얻기 - getBusRouteList
요청하는 웹 사이트 주소에 서비스 인증키와 데이터를 붙여서 보내는 Get방식을 활용합니다. 요청을 통해 데이터(headerCd. busRouteId)를 얻어 옵니다. 이 중에 busRouteId는 getStationByRoute에서 정보를 가져오기 위해 사용합니다.
항목명 | 기능 | 자료형태 |
headerCd | 이 값을 이용해서 정상적으로 DB와 연결이 되었는지를 확인할 수 있다. 값이 0이면 정상. | string |
busRouteId | 노선 ID | string |
2. busRouteId로 데이터 가져오기 - getStationByRoute
위에서 얻은 busRouteId를 통해 getStationByRoute에서 아래와 같은 데이터를 가져옵니다.
항목명 | 기능 | 자료형태 |
gpsX | x 좌표 | string |
gpsY | y 좌표 | string |
stationNm | 정류소 이름 | string |
sectSpd | 구간 속도 | string |
direction | 진행 방향 | string |
3. DownloadWebContent 클래스
AsyncTask 클래스에 상속한 클래스로 onCreate() 메소드에서 DownloadWebContent 클래스의 객체를 생성한 후에 execute 명령을 통해 작동시킨다.
String serviceUrl = "http://ws.bus.co.kr/..."
String serviceKey = "d8QNM..."
String strUrl = serviceUrl + "?serviceKey=" + serviceKey + "&strSrch=" + strSrch;
DownloadWebContent dwc1 = new DownloadWebContent();
dwc1.execute(strUrl);
4. 버스 번호를 검색해서 버스 위치 찾기
원래 예제에서는 버스 번호를 직접 검색하지 않고 숫자를 더하거나 빼서 검색합니다. 하지만 원하는 번호를 직접 입력하게끔 EditView와 Button의 onClick 메소드를 이용해 검색 방식으로 바꿨습니다.
검색 결과는 다음과 같습니다.
단순히 Open API의 결과값을 Parsing해서 정리한 모습입니다. 만약 여기에 스마트폰 GPS나 지도 API를 활용한다면 버스 도착시간, 정류장 위치 등을 확인할 수 있습니다.
이번 예제를 통해 배운 점은 총 3가지입니다.
1. XmlPullParser를 통해 API 결과를 Parsing하는 작업
2. AsyncTask를 이용해 Thread를 추가 생성하지않고 통신과 Parsing작업 수행하는 방법
3. Open API를 활용하기 위해 Manifests에 Permission과 CleartextTraffic 추가하기
1, 2번은 이전 포스팅에서 다뤄봤지만, 3번 때문에 API요청에 대한 응답을 못 받아서 약 4시간동안 삽질했습니다.. 특히, 같은 코드로는 vscode에서 작동하지만 Android Studio에서만 작동이 안됐습니다. Stream형태도 바꿔보고 나중에는 Permission까지 추가해봤지만 계속 실패했습니다.
다행히 우여곡절 끝에 CleartextTraffic을 추가해서 해결할 수 있었습니다. 해당 문제는 다음 포스팅에서 다뤄보도록 하겠습니다.
'Android > study_til' 카테고리의 다른 글
[AOS] 안드로이드 4대 컴포넌트 (0) | 2021.05.21 |
---|---|
[Android Studio] Http protocol 접속 시, 발생하는 예외발생 조치하기 (0) | 2020.12.30 |
[Android Studio] XML파싱과 AsyncTask 이해하기 (0) | 2020.12.29 |
[Android Studio] 영어단어 앱 만들기 - 세부 기능 (0) | 2020.12.13 |
[Android Studio] 영어단어 앱 만들기 (0) | 2020.12.13 |