2017-06-20-P
공공 api 이용해서 어플 만들기 (미세먼지 측정)
제일 먼저 할일을 만들 app 가 무엇을 사용할 것인지를 알려 주어야 한다 즉 예를 들면 폰에 허락을 받아야 한다.
(예를 들면 주소록을 쓴다면 주소록을 가져다 쓰겟습니다 등 허락을 받고 보고를 해야한다는것이다)
그 작업을 하기 위해서 먼저 manifests 안에 AndroidManifest.xml 파일을 수정하겠다.
위 사진과 같이 만들어줍니다 즉 추가한 부분은 4번줄이다 만들 어플은 네트워크에서 데이터를 받아와서 화면에 뿌릴거기 때문에 internet 이 되어야 하기 때문에 데이터를
쓰겠다고 말한것이다.
그다음으로는
저번에 이용했던 공공 api 사이트에 들어가서 로그인한후 미세농도 측정 api 의 소스랑 인증키를 가지고 옵니다
그후 안드로이드 스튜디오에서 새로운 프로젝트를 만들어줍니다.
그 다음
아래와 같이 java 안에 새로운 javaclass 인 airservice 를 만들어줍니다
그 후 공공 api 사이트에서 받아온 java 코드를 채워줍니다
위 사진과 같이 채워줍니다. 이 부분은 공공 api 를 가져다가 가지고 온것이다.만약 그냥 api 사이트에서 java 코드를 가지고 올경우
먼저 import 를 먼저 한다음에 예외처리를 해줘야한다
예외 처리 같은경우는 던져서 호출한 곳에서 처리 할수도 있지만 그렇게 되면 149 번 줄과 같이 conn.disconnect 를 할때 conn 의 객체 자체도 호출한곳으로 던져줘야 하기 때문에 호출한곳의
코드가 복잡해지는 경우가 생길수가 있다 그렇기 때문에 여기서 예외를 처리 하기 위해서 try catch문을 적어서 여기서 예외를 처리하게 된다 그후 110~112 번째 줄과 같이 conn , rd, sb 의 값을 다 사용할수 있게끔 전역변수화 시켜서 적어줍니다. 그다음으로는 이걸 문자형 으로 해서 리턴해줍니다.
다음으로 할것은 받아온걸 파싱해 줘야한다.
이런식으로 작성해줍니다. 설명을 하자면 18번줄에서 먼저 DTO 를 만듭니다.
19번줄에서 getAirBycity메서드를 호출하여 리턴 받은 값을 str 안에 담아줍니다 그후
try catch 절안에 22~23번째 줄과 같이 풀파서 생성을 위한 팩토리를 만들고 24~25번줄에서는 팩토리에서 풀파서를 생성합니다. 그후 26번째줄에서는 파서에서 사용할 데이터를 입력합니다. 그후 27~29번째 줄까지는 현재 파서의 이벤트 타입을 받아옵니다.
30번 라인을 설명하면 파서의 이벤트 타입이 마지막 끝내는 태그가 아니면 루프 하도록 만듭니다.
그후 스위치 문을 통해서 먼저 현재 파서진행의 태그가 만약 dataTime 이면 flag 의 값을 true 로 바꾸고 break 로 빠져나가서 다시 100번째 줄이 실행되고 100번쨰 문은 파서의 진행을을 다음으로 합니다 (태그,속성,글자,...)로 이동한다.
즉 태그를 찾았고 다음속성은 태그 안에 속성이 되는 그런 순서인것이다.
다음 속성을 읽을때 Text 가 오게 되므로 55번쨰 줄이 실행됩니다.
그리고 if 문에서 flag 의 값이 ture 이기 떄문에 안에 if else 문들이 조건에 맞게 실행이 되게 됩니다.
이런식으로 문자들을 18번째 줄에서 생성한 DTO 안에 set 해줍니다.
다음으로는 화면을 만들것이다 .
화면을 이런식으로 만들어줍니다.
그후 안에 값들이 데이터에 맞게끔 출력이 되도록 만들어 줄것이다
이때 중요한것은 ProgressBar 의 값응 0~ 100 까지로 설정합니다.
다음으로는 화면에 있는것들이 외부에서 받아온 데이터로 값을 set 되게끔 만들것이다.
이와 같이 만들어 줍니다 .
설명을 하자면 먼저 13~30번줄까지는 변수에 관한 선언이다.
그후 32~54 번까지는 main 에 관한 내용이다. 설명하기 전에 android 는 네트워크 작업을 main 스레드에서 할수 없게 되어있다 그렇기 때문에 다른 스레드를 만들어서 거기서 네트워크에 관련된 작업을 처리 해야한다.
그렇기 때문에 main 을 설명하기 전에 먼저 55~87번째 줄까지의 문을 설명하겠다 설명을 하자면 먼저
내부 클래스 이다 이 내부 클래스 tempThread 는 AsyncTask 를 상속받아서 만들어진다 AsyncTask 이것은 스레드의 역활을 한다.
먼저 56~61번째 메서드는 airservice.getair 메서드를 통해서 air 안에 담아줍니다
그후 air 자체를 리턴해서 64번~87번째 까지의 메서드에 매개변수 값으로 넣어주게 됩니다.
그후 매개변수 o 를 (air) 형변환 한다음 air 타입의 변수 air 에 담아줍니다 그후
67번줄과 같이 datatime객체의 text 를 air 안에 getDataTime 으로 바꿔달라고 main 에 요청하는것이다.
다음으로 메인을 설명하자면 먼저 35~52번까지는 화면에 있는것들을 불러 온것이고
그후 53번을 통해서 tempThread 의 execute 를 통해서 스레드를 main 이 아닌곳에 스레드를 만들어 네트워크에 관련된 처리를 하게 만드는것이다.