마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버스 위치 정보 api를 이용해서 버스 위치 띄우기

+1 추천

자바 소스입니다. 

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에서 파싱이 안 되는것 같습니다.

 

뭐가 문제일까요..

익명사용자 님이 2014년 11월 13일 질문
2014년 11월 13일 수정

1개의 답변

0 추천
위처럼 해놓으면 문제가 발생해도 뭐가 문제인지 알 수 없습니다.

Exception이 발생하면 무시하지 말고 log에 출력하세요.
익명사용자 님이 2014년 11월 14일 답변
...