[안드로이드] - 공공데이터 XML 파싱하여 활용하기 (2)
○ 공공데이터 XML 파싱하여 활용하기 (2) |
서울시 실시간 자치구별 대기환경 현황 API를 사용하기 위해 회원가입을 한 후 활용하기를 통해 자신만의 개인키를 발급받아 사용한다 http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-1200&srvType=S&serviceKind=1¤tPageNo=1 // AndroidManifest.xml ( 인터넷 사용 권한 추가를 위한 ) <uses-permission android:name="android.permission.INTERNET"/> // activity_main.xml ( 레이아웃 작업 위한 ) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" > <Button android:id="@+id/button" android:layout_width="100dp" android:layout_height="match_parent" android:text="search" android:textSize="12sp" android:onClick="mOnClick"/> </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="13sp" android:textStyle="bold"/> </ScrollView> </LinearLayout> // MainActivity.java public class MainActivity extends AppCompatActivity { TextView text; String key="(발급받은 서비스 키)"; String data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text= (TextView)findViewById(R.id.text); } // Button을 클릭했을 때 쓰레드 통해 해당 함수 실행 public void mOnClick(View v){ switch( v.getId() ){ case R.id.button: new Thread(new Runnable() { @Override public void run() { data= getXmlData(); // 아래 메소드를 호출하여 XML data를 파싱해서 String 객체로 얻어오기 runOnUiThread(new Runnable() { @Override public void run() { text.setText(data); // TextView에 문자열 data 출력 } }); } }).start(); break; } } String getXmlData(){ StringBuffer buffer=new StringBuffer(); String queryUrl="http://openapi.seoul.go.kr:8088/" + key + "/xml/ListAirQualityByDistrictService/1/25/"; try { URL url= new URL(queryUrl); //문자열로 된 요청 url을 URL 객체로 생성 InputStream is= url.openStream(); // url위치로 인풋스트림 연결 XmlPullParserFactory factory= XmlPullParserFactory.newInstance(); XmlPullParser xpp= factory.newPullParser(); // inputstream 으로부터 xml 입력받기 xpp.setInput( new InputStreamReader(is, "UTF-8") );
String tag; xpp.next(); int eventType= xpp.getEventType(); while( eventType != XmlPullParser.END_DOCUMENT ){ switch( eventType ){ case XmlPullParser.START_DOCUMENT: buffer.append("파싱 시작 \n\n"); break; case XmlPullParser.START_TAG: tag= xpp.getName(); // 태그 이름 얻어오기 if(tag.equals("item")) ; // 첫번째 검색결과 else if(tag.equals("MSRSTENAME")){ buffer.append("구 이름 : "); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); //줄바꿈 문자 추가 } else if(tag.equals("GRADE")){ buffer.append("상태 : "); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("PM10")){ buffer.append("미세먼지 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("PM25")){ buffer.append("초미세먼지 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("OZONE")){ buffer.append("오존 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("NITROGEN")){ buffer.append("이산화질소 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("CARBON")){ buffer.append("일산화탄소 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("SULFUROUS")){ buffer.append("아황산가스 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } break; case XmlPullParser.TEXT: break; case XmlPullParser.END_TAG: tag= xpp.getName(); // 태그 이름 얻어오기 if(tag.equals("PM25")) buffer.append("\n"); // 첫번째 검색결과 끝 줄바꿈 break; } eventType= xpp.next(); } } catch (Exception e) { // TODO Auto-generated catch blocke.printStackTrace(); } buffer.append("파싱 끝 \n"); return buffer.toString(); // StringBuffer 문자열 객체 반환 } } |
'안드로이드' 카테고리의 다른 글
[안드로이드] - 날씨 공공데이터 DOM 파싱, 복잡한 파싱하기 (1) | 2018.05.17 |
---|---|
[안드로이드] - 공공데이터 API 2개 이상 XML 파싱하기 (0) | 2018.05.17 |
[안드로이드] - 공공데이터 XML 파싱하여 활용하기 (1) (1) | 2018.05.17 |
[안드로이드] - drawable에서 벡터 아이콘 사용 및 응용하기 (0) | 2018.04.26 |
[안드로이드] - ListView 안의 아이템들 각각 이벤트 처리 (0) | 2018.04.18 |