마스터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;
 
        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일 답변
...