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

안드로이드) 전국에있는 휴게소 띄우기ㅠㅠ

0 추천

안녕하세요 ㅜ

 

본론부터 말씀드리면 '한국도로공사' 공공 DB를 가져다 구글맵에 전국에있는 휴게소를 마커로 보여주는것(진행중)

자신의 위치 기준 가까운 휴게소 검색기능(구현 예정)

여기서 구글맵에 전국에있는 휴게소를 띄워줘야 하거든요 ㅜ ..

하지만 계속 세계지도만뜨네요 ㅜ..

요청변수 필수 항목인 serviceKey와 type 넣어준 상태입니다

도대체 이유가 뭔지 .. 모르겠네요 ....

소스첨부 합니다 도와주십시오 ㅜ ..

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 strUrl;



        serviceUrl ="http://data.ex.co.kr/openapi/locationinfo/locationinfoRest?serviceKey=         &type=xml";
        serviceKey= "";
        serviceKey = URLEncoder.encode(serviceKey);
         String type = "";




        strUrl=serviceUrl+"?ServiceKey="+serviceKey+"&type="+type;

               new DownloadWebpageTask().execute(strUrl);


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    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)
        {
            displayhupos(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 displayhupos(String result) {
            String unitCode = "";
            String unitName = "";
            String routeNo  = "";
            String routeName = "";
            String xValue = "";
            String yValue = "";

            boolean bSet_unitNama = false;
            boolean bSet_unitCode = false;
            boolean bSet_routeNo = false;
            boolean bSet_routeName = false;
            boolean bSet_xValue = false;
            boolean bSet_yValue = 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) {
                    //  System.out.println(i);
                    //    i++;
                    if (eventType == XmlPullParser.START_DOCUMENT) {
                        ;
                    } else if (eventType == XmlPullParser.START_TAG) {
                        String tag_name = xpp.getName();
                        if (tag_name.equals("uniCode"))
                            bSet_unitCode = true;
                        if (tag_name.equals("unitName"))
                            bSet_unitNama = true;
                        if (tag_name.equals("routeNo"))
                            bSet_routeNo = true;
                        if (tag_name.equals("routeName"))
                            bSet_routeName = true;
                        if (tag_name.equals("xValue"))
                            bSet_xValue = true;
                        if (tag_name.equals("yValue"))
                            bSet_yValue = true;


                    } else if (eventType == XmlPullParser.TEXT) {
                        if (bSet_unitCode) {
                            unitCode = xpp.getText();
                            bSet_unitCode = false;
                        }
                        if (bSet_unitNama) {
                            unitName = xpp.getText();
                            bSet_unitNama = false;
                        }
                        if (bSet_routeNo) {
                            routeNo = xpp.getText();
                            bSet_routeNo = false;
                        }
                        if (bSet_routeName) {
                            routeName = xpp.getText();
                            bSet_routeName = false;
                        }

                        if (bSet_xValue) {
                            xValue = xpp.getText();
                            bSet_xValue = false;
                        }
                        if (bSet_yValue) {
                            yValue = xpp.getText();
                            bSet_yValue = false;

                            displayMap(xValue, yValue,unitName ,routeName);
                            //        System.out.println("x" + xValue + "y" + yValue + "Name" + unitName);
                        }

                    } else if (eventType == XmlPullParser.END_TAG) {
                        ;
                    }
                    eventType = xpp.next();
                }
            } catch (Exception e) {
                ;
            }
        }
        private void displayMap(String xValue,String yValue,String unitName,String routeName)
        {
            double latitude = Double.parseDouble(xValue);
            double longitude = Double.parseDouble(yValue);
/*
            LocationManager lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);

               String locationProvider=lm.getBestProvider(new Criteria(),true);

            Location location=lm.getLastKnownLocation(locationProvider);*/

            final LatLng LOC = new LatLng(latitude,longitude);

            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LOC, 5));
            Marker mk = mMap.addMarker(new MarkerOptions()
                    .position(LOC).
                            icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
                    .title(unitName)
                   .snippet(routeName));


            mk.showInfoWindow();


        }

    }

}

API키는  소스 상엔 없지만 10자리 숫자로 이루어진 API키를  넣은 상태입니다

그리고 소스상 요청 URL 주소를 웹브라우저에 그대로 처보면 XML로 잘나옵니다 ㅠ

 

익명사용자 님이 2015년 9월 5일 질문
2015년 9월 5일 수정

1개의 답변

+1 추천
지도가 뜬다면 (보인다면) key와 관련된 문제는 아닙니다

그냥 세계지도로 보인다면 기준점(기준 위치)가 없어서 좌표가 (0,0)으로 맞춰져있고 줌레벨이 최소로 되어 있어서 그럴겁니다

아마도 사용자의 현재 위치가 기준이 될테니 그걸 넣어주시고 적당한 줌 레벨로 맞춰주시면 원하는 화면이 나올 겁니다.
cc1232 (35,280 포인트) 님이 2015년 9월 7일 답변
소스상 공공디비의 url에서 데이터를 받아오지 못하는거같은데 ㅜ .. 로그캣으론 "다운로드 실패"가 뜨진 않는거보면 다운은 받아지는거같고 ... .. 데이터 url소스는 한국도로공사 데이터포털사이트에서 필수 항목인 api키값과 타입="xml" 을 줬구요 .. ㅜ 혹시 다른 문제가 있을까요 ㅜ . .
사용하신 URL을 제가 써보지 않아서 뭐라 드릴 말씀은 없고요...
단지 세계지도로 나온다는 내용에 대해서 답변을 달은 겁니다.
현재 소스상에서는 displayMap()메소드를 호출하는 곳이 딱 한 군데 있는데, 그 부분이 조건상 실행되지 않고 있는 것으로 보입니다. 왜 안 되는지는 질문하신 분이 전체소스와 키 등을 갖고 있으니 디버깅해보셔야겠죠.
해결 했습니다 답변 너무 감사드립니다 안펍에 님같은 분들만 계셔야하는데 다들 질문 그냥 읽고 답변도 안다는 사람들 너무 많더라구요 다시한번 감사말씀 드립니다 !!
...