공공데이터포털에서 좌표기반근접정류소 목록조회의 샘플 데이터는 이러한 형식으로 되있다.
필요한 nodeid, nodenm태그를 파싱 해보기로 했다.
fusedlocationproviderclient로 얻은 좌표를 이용해 주변 정류소 목록을 얻어왔다.
public String getTagoXmlData() {
String lat_str = Double.toString(latitude);
String lon_str = Double.toString(longitude);
StringBuffer buffer = new StringBuffer();
Thread t = new Thread(() -> {
String queryUrl = "http://apis.data.go.kr/1613000/BusSttnInfoInqireService/getCrdntPrxmtSttnList?serviceKey="
+ "key값"
+ "&numOfRows=10&pageNo=1&_type=xml"
+ "&gpsLati=" + lat_str + "&gpsLong=" + lon_str;
try {
URL url = new URL(queryUrl);//문자열로 된 요청 url을 URL 객체로 생성.
InputStream is = url.openStream(); //url위치로 입력스트림 연결
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new InputStreamReader(is, "UTF-8")); //inputstream 으로부터 xml 입력받기
String tag;
xpp.next();
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
tag = xpp.getName();//테그 이름 얻어오기
if (tag.equals("item")) ;// 첫번째 검색결과
else if (tag.equals("nodeid")) {
//buffer.append("nodeid :");
xpp.next();
//Log.d("ID",xpp.getText());
buffer.append(xpp.getText());//nodeid를 버퍼에 추가
buffer.append(",");//,문자 추가
} else if (tag.equals("nodenm")) {
//buffer.append("nodenm :");
xpp.next();
//Log.d("NM",xpp.getText());
buffer.append(xpp.getText());//nodenm을 버퍼에 추가
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
tag = xpp.getName(); //테그 이름 얻어오기
if (tag.equals("item")) buffer.append(",");// 첫번째 item 파싱 완료, 그다음 반복...
break;
}
eventType = xpp.next();
}
} catch (Exception e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
});
try {
t.start();
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return buffer.toString();//StringBuffer 문자열 리턴
}
스레드를 사용 안했을 때는 파싱한결과를 얻지 못했다.
안드로이드에서 Main Thread의 주요 역할은 화면 그리기이다.
대기시간이 길어지는 네트워크 작업은 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길 수 있어 무거운 작업은 Main Thread에서 하지 말아야 한다.
그래서 스레드를 이용하여 파싱을 하여 결과를 얻을 수 있었다.
https://recipes4dev.tistory.com/143?category=768056
https://brunch.co.kr/@mystoryg/84