자바 소스입니다.
package com.example.seoulbus;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends Activity {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
String serviceUrl;
String serviceKey;
// String strSrch;
String strUrl;
serviceUrl = "http://openapi.tago.go.kr/openapi/service/BusLcInfoInqireService/getRouteAcctoBusLcList";
serviceKey = "JwqvsJwdPHY4cnUQ4W3IBqyhMm5eg8A0P2CWGf8fCxBwhu680maF7HsK%2BVMejTbf33vTpcshRTl7FEuKR%2Fghuw%3D%3D";
serviceKey = URLEncoder.encode(serviceKey);
// String busRouteId = "3040600";
String cityCode = "25";
String routeId = "DJB30300052ND";
strUrl = serviceUrl + "?ServiceKey=" + serviceKey + "&cityCode="
+ cityCode + "&routeId=" + routeId;
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) {
displayBuspos(result);
}
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();
}
}
private void displayBuspos(String result) {
String routenm = "";
String gpslati = "";
String gpslong = "";
boolean bSet_routenm = false;
boolean bSet_gpslati = false;
boolean bSet_gpslong = false;
try {
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(result));
int eventType = xpp.getEventType();
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("routenm"))
bSet_routenm = true;
if (tag_name.equals("gpslati"))
bSet_gpslati = true;
if (tag_name.equals("gpslong"))
bSet_gpslong = true;
} else if (eventType == XmlPullParser.TEXT) {
if (bSet_gpslati) {
gpslati = xpp.getText();
bSet_gpslati = false;
}
if (bSet_gpslong) {
gpslong = xpp.getText();
bSet_gpslong = false;
}
if (bSet_routenm) {
routenm = xpp.getText();
bSet_routenm = false;
}
displayMap(gpslati, gpslong, routenm);
} else if (eventType == XmlPullParser.END_TAG) {
;
}
eventType = xpp.next();
}
} catch (Exception e) {
;
}
}
private void displayMap(String gpslati, String gpslong, String routenm) {
double latitude = Double.parseDouble(gpslati);
double longitude = Double.parseDouble(gpslong);
final LatLng LOC = new LatLng(latitude, longitude);
mMap.setMyLocationEnabled(true);
mMap.addMarker(new MarkerOptions().position(LOC));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LOC, 16));
// mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LOC, 12));
// Marker mk = mMap.addMarker(new
// MarkerOptions().position(LOC).icon(BitmapDescriptorFactory.fromResource(R.drawable.bus)).title(routeNm));
// mk.showInfoWindow();
}
}
}
xml은 이런식으로 구성되어 있습니다.
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<gpslati>36.333051</gpslati>
<gpslong>127.431756</gpslong>
<nodeid>DJB8001420ND</nodeid>
<nodenm>대전역</nodenm>
<nodeord>12</nodeord>
<routenm>202</routenm>
<routetp>간선</routetp>
</item>
버스 위치를 잡지를 못 하네요...
xml에서 파싱이 안 되는것 같습니다.
뭐가 문제일까요..