728x90
먼저 공공데이터포털에 접속해 원하는 API를 검색해줍니다.
저는 코로나 선별 진료소를 찾아볼 수 있는 어플을 만들기 위해 코로나로 검색하였습니다.
그 후 XML을 파일을 다운받아 줍니다.
이제 안드로이드 스튜디오로 와서 빈 프로젝트를 하나 만들어줍니다.
프로젝트가 생성되면 res 디렉토리에서 우클릭 후 New > Android Resource Directory를 선택합니다.
Resource type을 raw로 설정 후 OK를 눌러줍니다. 그 후 다운받은 XML파일을 드래그해서 raw 디렉토리안에 넣어줍니다.
MainActivity에 아래와 같이 코드를 작성하고 Log를 확인해보면 파싱이 제대로 수행되는 것을 확인할 수 있습니다.
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xml_parse();
}
private void xml_parse() {
String TAG = "Parsing";
InputStream inputStream = getResources().openRawResource(R.raw.selectiveclinic_20200305);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
XmlPullParserFactory xmlPullParserFactory = null;
XmlPullParser xmlPullParser = null;
try {
xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParser = xmlPullParserFactory.newPullParser();
xmlPullParser.setInput(reader);
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_DOCUMENT:
Log.i(TAG, "xml START");
break;
case XmlPullParser.START_TAG:
Log.i(TAG, "Start TAG :" + xmlPullParser.getName());
break;
case XmlPullParser.END_TAG:
Log.i(TAG,"End TAG : "+ xmlPullParser.getName());
break;
case XmlPullParser.TEXT:
Log.i(TAG,"TEXT : "+ xmlPullParser.getText());
break;
}
try {
eventType = xmlPullParser.next();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} finally{
try{
if(reader !=null) reader.close();
if(inputStreamReader !=null) inputStreamReader.close();
if(inputStream !=null) inputStream.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
}
}
이제 이 파싱한 데이터를 가공해보겠습니다. MainActivity가 있는 디렉토리 안에 Clinic이라는 클래스 파일을 하나 만들어줍니다.
그 후 Alt + Insert를 눌러 Getter and Setter를 눌러줍니다. 모든 변수를 선택 후 OK를 누르면 변수에 대해 get함수 set함수가 자동으로 생성됩니다.
그 후 추출한 데이터를 ArrayList에 저장해줍니다.
package com.example.coronaclinicmap;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
final String TAG = "Loading Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loading);
ArrayList<Clinic> arrayList = xml_parse();
Log.d(TAG, String.valueOf(arrayList.size()));
Intent intent = new Intent(LoadingActivity.this, MainActivity.class);
intent.putExtra("clinic", arrayList);
startActivity(intent);
}
private ArrayList<Clinic> xml_parse() {
ArrayList<Clinic> clinicsList = new ArrayList<Clinic>();
InputStream inputStream = getResources().openRawResource(R.raw.selectiveclinic_20200306);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
XmlPullParserFactory xmlPullParserFactory = null;
XmlPullParser xmlPullParser = null;
try {
xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParser = xmlPullParserFactory.newPullParser();
xmlPullParser.setInput(reader);
Clinic clinic = null;
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_DOCUMENT:
Log.i(TAG, "xml START");
break;
case XmlPullParser.START_TAG:
String startTag = xmlPullParser.getName();
Log.i(TAG, "Start TAG :" + startTag);
if(startTag.equals("Row")) {
clinic = new Clinic();
Log.d(TAG, "clinic 추가");
}
else if(startTag.equals("연번")) {
clinic.setNumber(xmlPullParser.nextText());
Log.d(TAG, clinic.getNumber());
Log.d(TAG, "clinic 연변");
}
else if(startTag.equals("검체채취가능여부")) {
clinic.setSample(xmlPullParser.nextText());
}
else if(startTag.equals("시도")) {
clinic.setCity(xmlPullParser.nextText());
}
else if(startTag.equals("시군구")) {
clinic.setDistrict(xmlPullParser.nextText());
}
else if(startTag.equals("의료기관명")) {
clinic.setName(xmlPullParser.nextText());
}
else if(startTag.equals("주소")) {
clinic.setAddress(xmlPullParser.nextText());
}
else if(startTag.equals("대표전화번호")) {
clinic.setPhoneNumber(xmlPullParser.nextText());
}
break;
case XmlPullParser.END_TAG:
String endTag = xmlPullParser.getName();
Log.i(TAG,"End TAG : "+ endTag);
if (endTag.equals("Row")) {
clinicsList.add(clinic);
}
break;
}
try {
eventType = xmlPullParser.next();
}catch (IOException e) {
e.printStackTrace();
}
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try{
if(reader !=null) reader.close();
if(inputStreamReader !=null) inputStreamReader.close();
if(inputStream !=null) inputStream.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
return clinicsList;
}
}
파싱한 데이터를 가지고 구글 맵에 적용시키는 내용은 다음 글에 정리하겠습니다.
자료출처 : https://link2me.tistory.com/1282?category=1019584
728x90
'Programming > Android' 카테고리의 다른 글
안드로이드 스튜디오 주소명으로 위도/경도 값 구하기 (0) | 2020.03.08 |
---|---|
안드로이드 스튜디오 구글 맵 사용하기 (0) | 2020.03.07 |
안드로이드 스튜디오 notification 소리 진동 설정 (0) | 2020.03.04 |
안드로이드 스튜디오 알람 사용하기 (10) | 2019.12.05 |
안드로이드 스튜디오 뒤로가기 버튼으로 홈으로 이동하기 (0) | 2019.12.04 |