Riucc's Storage
RSS
태그
관리
쓰기
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
Riucc's Storage

[안드로이드] - 비동기 AsyncTask 예제 2개

안드로이드|2018. 5. 29. 14:26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

○ 비동기 AsyncTask 예제 2개

 

참고해서 사용하기 위한 예제 2개


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_weathermise);


weather_url = "http://newsky2.kma.go.kr/service/

SecndSrtpdFrcstInfoService2/ForecastGrib?serviceKey=(자신의 서비스        키)&base_date="+today+"&base_time="+todaytime+"&nx=61&ny=

126&numOfRows=10&pageSize=10&pageNo=1&startPage=1&_type=xml";


    System.out.println("날씨 : " + weather_url);

    new GetXMLTask().execute();

}

    private class GetXMLTask extends AsyncTask<String, Void, Document> {

        @Override

        protected Document doInBackground(String... urls) {

            URL url;

            Document doc = null;

            try {

                url = new URL(weather_url);

                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

                DocumentBuilder db = dbf.newDocumentBuilder();

                doc = db.parse(new InputSource(url.openStream()));

                doc.getDocumentElement().normalize();


            } catch (Exception e) {

                Toast.makeText(getBaseContext(), "Parsing Error", Toast.LENGTH_SHORT).show();

            }

            return doc;

        }


        @Override

        protected void onPostExecute(Document doc) {

            NodeList nodeList = doc.getElementsByTagName("item");


            for (int i = 0; i < nodeList.getLength(); i++) {


                Node node = nodeList.item(i);

                Element fstElmnt = (Element) node;


                NodeList idx = fstElmnt.getElementsByTagName("category");

                // 모든 category 값들을 출력 위한

                // s += "category = "+  idx.item(0).getChildNodes().item(0).getNodeValue() +"\n";



                // 강수형태 PTY 없음(0), 비(1), 비/눈(2), 눈(3)

                if (idx.item(0).getChildNodes().item(0).getNodeValue().equals("PTY")) {

                    NodeList gugun = fstElmnt.getElementsByTagName("obsrValue");

                   // s += "fcstValue 강수확률 = " + gugun.item(0).getChildNodes().item(0).getNodeValue() + "% \n";

                    int pty_num = Integer.parseInt(gugun.item(0).getChildNodes().item(0).getNodeValue());


                    if (pty_num == 0) {

                        rainper.setText("없음");

                    } else if (pty_num == 1) {

                        rainper.setText("비");

                    } else if (pty_num == 2) {

                        rainper.setText("비/눈");

                    } else if (pty_num == 3) {

                        rainper.setText("눈");

                    }

                    System.out.println("강수형태 : " + Integer.parseInt(gugun.item(0).getChildNodes().item(0).getNodeValue()));

                }


                // 습도 REH, fcstValue 습도에 해당하는 값

                if (idx.item(0).getChildNodes().item(0).getNodeValue().equals("REH")) {

                    NodeList gugun = fstElmnt.getElementsByTagName("obsrValue");

                    // s += "fcstValue 습도 = " + gugun.item(0).getChildNodes().item(0).getNodeValue() + "% \n";

                    humi.setText(gugun.item(0).getChildNodes().item(0).getNodeValue() + "%");

                }


                // 온도 T1H, fcstValue 온도에 해당하는 값

                if (idx.item(0).getChildNodes().item(0).getNodeValue().equals("T1H")) {

                    NodeList gugun = fstElmnt.getElementsByTagName("obsrValue");

                    //s += "fcstValue 온도 = " + gugun.item(0).getChildNodes().item(0).getNodeValue() + "'C \n";

                    temp.setText(gugun.item(0).getChildNodes().item(0).getNodeValue() + "'C");

                }


                // 구름상태 SKY, fcstValue 구름상태에 해당하는 값

                // 0~2 : 맑음, 3~5 : 구름조금, 6~8 : 구름많음, 9~10 : 흐림

                if (idx.item(0).getChildNodes().item(0).getNodeValue().equals("SKY")) {

                    NodeList gugun = fstElmnt.getElementsByTagName("obsrValue");

                    int cloud_num = Integer.parseInt(gugun.item(0).getChildNodes().item(0).getNodeValue());


                    if (cloud_num == 0 || cloud_num == 1 || cloud_num == 2) {

                        //s += "fcstValue 하늘상태 = 맑음\n";

                        stat.setText("맑음");

                    } else if (cloud_num == 3 || cloud_num == 4 || cloud_num == 5) {

                        //s += "fcstValue 하늘상태 = 구름 조금\n";

                        stat.setText("구름 조금");

                    } else if (cloud_num == 6 || cloud_num == 7 || cloud_num == 8) {

                       // s += "fcstValue 하늘상태 = 구름 많음\n";

                        stat.setText("구름 많음");

                    } else if (cloud_num == 9 || cloud_num == 10) {

                       // s += "fcstValue 하늘상태 = 흐림\n";

                        stat.setText("흐림");

                        // s += "fcstValue 하늘상태 = "+  gugun.item(0).getChildNodes().item(0).getNodeValue() +"\n";

                    }


                    // 모든 카테고리에 대한 fcstValue 값들을 출력 위한

                    // NodeList gugun = fstElmnt.getElementsByTagName("fcstValue");

                    // s += "fcstValue = "+  gugun.item(0).getChildNodes().item(0).getNodeValue() +"\n";

                }

                super.onPostExecute(doc);

            }

        }

    }


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_weathermise);



strUrl = "http://openAPI.seoul.go.kr:8088/(자신의 키)/xml/ListAirQualityByDistrictService/1/5/111273/";

    System.out.println("미세먼지 url : " + strUrl);


    new DownloadWebpageTask().execute(strUrl);

}

    private class DownloadWebpageTask extends AsyncTask<String, Void, String> {

        @Override

        protected String doInBackground(String... urls) {

            try {

                return (String) downloadUrl((String) urls[0]);

            } catch (IOException e) {

                return "다운로드 실패";

            }

        }


        protected void onPostExecute(String result) {

            try {

                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

                factory.setNamespaceAware(true);

                XmlPullParser xpp = factory.newPullParser();

                xpp.setInput(new StringReader(result));

                int eventType = xpp.getEventType();


                String Gu = "";

                String Grade = "";

                String Mise = "";

                String Chomise = "";



                boolean bSet_Gu = false;

                boolean bSet_Grade = false;

                boolean bSet_Mise = false;

                boolean bSet_Chomise = false;




                while (eventType != XmlPullParser.END_DOCUMENT) {

                    if (eventType == XmlPullParser.START_DOCUMENT) {

                        ;

                    } else if (eventType == XmlPullParser.START_TAG) {

                        String tag_name = xpp.getName();

                        if (tag_name.equals("GRADE"))

                            bSet_Grade = true;

                        if (tag_name.equals("PM10"))

                            bSet_Mise = true;

                        if (tag_name.equals("PM25"))

                            bSet_Chomise = true;


                    } else if (eventType == XmlPullParser.TEXT) {


                        if (bSet_Grade) {

                            Grade = xpp.getText();

                            System.out.println("대기상태 : " + Grade);

                            ecoValue.setText("대기상태 : " + Grade);

                            String seeStat = Grade;

                            if(seeStat.equals("좋음")){

                                ecoImage.setImageResource(R.drawable.ic_status_1);

                                ecodetailtext1.setText("마스크를 안끼셔도 됩니다");

                                ecodetailtext2.setText("실외활동하기 좋습니다");

                                ecodetailtext3.setText("그래도 손은 깨끗이 씻어주세요");

                                ecodetailtext4.setText("환기시키기 좋습니다");

                            } else if(seeStat.equals("보통")){

                                ecoImage.setImageResource(R.drawable.ic_status_2);

                                ecodetailtext1.setText("호흡기가 민감하면 마스크를 쓰세요");

                                ecodetailtext2.setText("민감군은 장시간 또는 무리한 실외 활동 자제하세요");

                                ecodetailtext3.setText("물이나 비타민 C가 많은 채소/과일을 섭취하세요");

                                ecodetailtext4.setText("환기를 되도록 자제하세요");

                            } else if(seeStat.equals("나쁨")){

                                ecoImage.setImageResource(R.drawable.ic_status_3);

                                ecodetailtext1.setText("마스크를 껴주세요");

                                ecodetailtext2.setText("실외활동 및 외출을 자제하세요");

                                ecodetailtext3.setText("혹시 외출했다면, 깨끗이 씻으세요");

                                ecodetailtext4.setText("환기는 1분 내외로 해주세요");

                            } else if(seeStat.equals("매우나쁨")){

                                ecoImage.setImageResource(R.drawable.ic_status_4);

                                ecodetailtext1.setText("마스크는 필수입니다");

                                ecodetailtext2.setText("실외활동 및 외출을 자제하세요");

                                ecodetailtext3.setText("혹시 외출했다면, 깨끗이 씻으시고 물을 많이 드세요");

                                ecodetailtext4.setText("환기는 1분 내외로 해주세요");

                            }

                            // tv.append("stat : " + stat + "\n");

                            bSet_Grade = false;

                        }


                        if (bSet_Mise) {

                            Mise = xpp.getText();


                            seeMise2.setText(Mise);

                            System.out.println("미세먼지 : " + Mise);


                            int numberMise = Integer.parseInt(Mise);


                            if(numberMise <= 30) {

                                seeMiseInfo2.setText("좋음");

                            } else if (numberMise <= 80) {

                                seeMiseInfo2.setText("보통");

                            } else if (numberMise <= 150 ){

                                seeMiseInfo2.setText("나쁨");

                            } else {

                                seeMiseInfo2.setText("매우나쁨");

                            }



                            bSet_Mise = false;

                        }

                        if (bSet_Chomise) {

                            Chomise = xpp.getText();


                            seeChomise2.setText(Chomise);

                            System.out.println("초미세먼지 : " + Chomise);


                            int numberChomise = Integer.parseInt(Chomise);


                            if(numberChomise <= 15) {

                                seeChomiseInfo2.setText("좋음");

                            } else if(numberChomise <= 50){

                                seeChomiseInfo2.setText("보통");

                            } else if (numberChomise <= 100){

                                seeChomiseInfo2.setText("나쁨");

                            }else {

                                seeChomiseInfo2.setText("매우나쁨");

                            }


                            bSet_Chomise = false;

                        }


                    } else if (eventType == XmlPullParser.END_TAG) {

                        ;

                    }

                    eventType = xpp.next();

                }

            } catch(Exception e){

                ;

            }

        }


        private  String downloadUrl(String myurl) throws IOException {

            HttpURLConnection conn = null;

            try {

                URL url = new URL(myurl);

                conn = (HttpURLConnection) url.openConnection();

                BufferedInputStream buf = new BufferedInputStream(conn.getInputStream());

                BufferedReader bufreader = new BufferedReader(new InputStreamReader(buf, "utf-8"));


                String line = null;

                String page = "";

                while((line = bufreader.readLine()) != null){

                    page += line;

                }

                return page;

            } finally {

                conn.disconnect();

            }

        }

    }


저작자표시 (새창열림)

'안드로이드' 카테고리의 다른 글

[안드로이드] - Mapbox API 이용해 지도 및 길찾기 구현하기  (1) 2018.05.31
[안드로이드] - 주소 값을 이용해 위도 경도 구하기  (0) 2018.05.31
[안드로이드] - picasso로 이미지 URL 쉽게 ImageView에 띄워주기  (0) 2018.05.24
[안드로이드] - CardView 에 FadeIn 애니메이션 효과주기  (0) 2018.05.18
[안드로이드] - 날씨 공공데이터 DOM 파싱, 복잡한 파싱하기  (1) 2018.05.17

댓글()
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
최근 등록 현황
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
달력
지난달
2025.11
다음달
일월화수목금토
1
2345678
9101112131415
16171819202122
23242526272829
30
태그 구름
  • 커널 모듈 프로그래밍
  • 카카오 로그인
  • 안드로이드 카카오 로그인 연동
  • 소켓 프로그래밍
  • 정보처리산업기사 16년 필기
  • 정보처리산업기사 정리
  • 안드로이드 intent
  • 정보처리산업기사 15년 필기
  • 소켓
  • 이클립스 디비 연동
  • 정규형
  • 정보처리산업기사 필기
  • 자료구조
  • jsp
  • HTML
  • 이클립스 mysql 연동
  • 정보처리기사 실기 정리
  • 정보처리산업기사 16년
  • nodejs express
  • 안드로이드
  • 정보처리산업기사 15년
  • 정보처리산업기사 총정리
  • 안드로이드 카카오 로그인
  • 정규화
  • 데이터베이스
  • 정보처리산업기사 요약
  • 리눅스
  • 카카오 로그인 연동
  • nodejs MySQL 연동하기(Connection Pool)
  • 정보처리산업기사 필기 정리
카운터
전체 방문자
오늘
어제
Skin by M1REACT. Designed by M1STORY.TISTORY.COM. Valid XHTML 1.0 and CSS 3. Copyright ⓒ Riucc's Storage. All rights reserved.

티스토리툴바