[안드로이드] - 공공데이터 XML 파싱하여 활용하기 (1)
○ 공공데이터 XML 파싱하여 활용하기 (1) |
한국환경공단_전기차충전소 운영현황 API를 사용하기 위해 회원가입을 한 후 활용하기를 통해 자신만의 개인키를 발급받아 사용한다 https://www.data.go.kr/dataset/15012979/openapi.do // 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"> <EditText android:id="@+id/editText" android:layout_width="250dp" android:layout_height="match_parent" android:hint="지역명을 입력해주세요"/> <Button android:id="@+id/button" android:layout_width="100dp" android:layout_height="match_parent" android:text="search" android:textSize="12sp" android:clickable="true" android:onClick="buttonClicked"/> </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" 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 { EditText editText; TextView textView; String data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.editText); textView = (TextView)findViewById(R.id.textView); } // 버튼을 클릭했을 때 쓰레드를 생성하여 해당 함수를 실행하여 텍스트뷰에 데이터 출력 public void buttonClicked(View v){ switch( v.getId() ){ case R.id.button: // 쓰레드를 생성하여 돌리는 구간 new Thread(new Runnable() { @Override public void run() { data= getData(); // 하단의 getData 메소드를 통해 데이터를 파싱 runOnUiThread(new Runnable() { @Override public void run() { textView.setText(data); } }); } }).start(); break; } } String getData(){ StringBuffer buffer = new StringBuffer(); String str = editText.getText().toString(); String location = URLEncoder.encode(str); String queryUrl="http://openapi.kepco.co.kr/service/evInfoService/getEvSearchList?" +"addr="+location +"&pageNo=1&numOfRows=1000&ServiceKey=(자신의 서비스 키)"; 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("addr")){ buffer.append("주소 : "); xpp.next(); // addr 요소의 TEXT 읽어와서 문자열버퍼에 추가 buffer.append(xpp.getText()); buffer.append("\n"); // 줄바꿈 문자 추가 } else if(tag.equals("chargeTp")){ buffer.append("충전소타입 : "); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("cpId")){ buffer.append("충전소ID :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("cpNm")){ buffer.append("충전기 명칭 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("cpStat")){ buffer.append("충전기 상태 코드 :"); xpp.next(); buffer.append(xpp.getText());// buffer.append("\n"); } else if(tag.equals("cpTp")){ buffer.append("충전 방식 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append(" , "); } else if(tag.equals("csId")){ buffer.append("충전소 ID :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("cpNm")){ buffer.append("충전소 명칭 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("lat")){ buffer.append("위도 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("longi")){ buffer.append("경도 :"); xpp.next(); buffer.append(xpp.getText()); buffer.append("\n"); } else if(tag.equals("statUpdateDatetime")){ 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("item")) buffer.append("\n"); // 첫번째 검색결과종료 후 줄바꿈 break; } eventType= xpp.next(); } } catch (Exception e) { e.printStackTrace(); } buffer.append("파싱 종료 단계 \n"); return buffer.toString(); // 파싱 다 종료 후 StringBuffer 문자열 객체 반환 } } |
'안드로이드' 카테고리의 다른 글
[안드로이드] - 공공데이터 API 2개 이상 XML 파싱하기 (0) | 2018.05.17 |
---|---|
[안드로이드] - 공공데이터 XML 파싱하여 활용하기 (2) (1) | 2018.05.17 |
[안드로이드] - drawable에서 벡터 아이콘 사용 및 응용하기 (0) | 2018.04.26 |
[안드로이드] - ListView 안의 아이템들 각각 이벤트 처리 (0) | 2018.04.18 |
[안드로이드] - RecyclerView 리싸이클러뷰 클릭 이벤트 사용하기 (0) | 2018.04.01 |