Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 31
Archives
Today
Total
관리 메뉴

운기의 블로그

안드로이드 asynctask / 기상청 지역코드 JSON 파싱 / Spinner #4 본문

안드로이드

안드로이드 asynctask / 기상청 지역코드 JSON 파싱 / Spinner #4

운띠야 2020. 1. 16. 03:59

 

안드로이드도 시작한지 얼마안된상태에서 파싱도 처음해보니 이번꺼는 체감상 상당히 어려웠습니다..ㅠㅠ

우선 오늘 포스팅 할 내용은 기상청에서 제공해주는 JSON 파일을 파싱할 건데, 이때 안드로이드에서는 UI에 부담이 가지 않게 하기 위해서 ANSYCTASK(스레드) 를 이용해서 구현했고 파싱한 결과값을 Spinner에 넣어주는 작업입니다.

 

http://www.kma.go.kr/DFSROOT/POINT/DATA/top.json.txt

 

기상청에서 제공해주는 code 와 vaule 값으로 이루어진 JSON 파일입니다. 

JSON 파일을 파싱하기 위해서 구글에서 만든 GSON을 이용했습니다. 

 

GSON을 이용하는 방식은 간단합니다.

 

 

안드로이드 프로젝트에서 build.gradle (Module.app)에서 사용하고 싶은 GSON버전에 맞게

추가해 주신 후 Sync Now를 클릭해 주면됩니다.

 

implementation 'com.google.code.gson:gson:2.8.5'

 

 다음으로는 이제 스피너를 사용하기 위해서 main.xml 파일에서 스피너를 만들어 주었습니다.

 

 

다음으로 메인엑티비티로 넘어와서 작성한 코드입니다.

 

 

AsyncTask를 실행하기 위해서 execute()를 사용하고 이때 url 값을 넘겨줍니다.

뒤에 붙은 .get()은 AsyncTask의 작업 결과물을 넘겨받기위해서 사용합니다. 

 

이렇게 메인을 작성하면 ,

Background 객체로 넘어와서 AsyncTask를 본격적으로 구현해 줍니다.

 

 

AsyncTask의 대부분 작업은 doinBackground에서 작동하게 되고 String ... strurl은 메인에서 넘겨 준 url 주소를 담고 있는 배열을 의미합니다. 그래서 아래에 보면 URL url = new URL(strurl[0]) 써줘서 0번째 배열에 있는 url 주소값을 사용합니다.

 

HttpURLConnection 을 이용해 웹과 통신할 수 있게 하고 그 안에 내용을 읽어와 JSONArray에 담아서 반환해주게 됩니다.

 

 

위의 코드에 연결하시면됩니다.

작성이 완료되면 메인으로 돌아와서

 

 

doinBackground에서 반환된 값을 JSONArray에 담고 이 길이만큼 반복문을 돌리면서 

기상청에서 주어지는 JSON파일의 value 값만 arrayList에

추가해 주고 담긴 내용물을 스피너에 넣어주면 됩니다.

 

 

 

현재 여기까지 됬고 첫번째 스피너의 값을 선택하면 두번째 스피너에 영향을 주고 두번째는 세번째 

이런식으로 작업을 진행 후, 지도에 좌표를 이용해서 마커를 찍을 예정입니다.

 

 


 

#3에서 인터넷 권한에 관련되서 설명드렸습니다. 이 방법때문에 실행이 되지 않아 2일간 헤맸었는데 그 방법은

xml 파일도 지워주시고, manifest에서도 xml 추가에 관련된걸 지우시고 아래의 그림처럼 해주시면됩니다.

 

 

 

cleartext Http traffic to ...... not permitted라는 오류가 뜬다면 Https가 아닌 주소이기에 꼭 추가해주시는게 좋습니다.

-- https://developside.tistory.com/85 참고