안드로이드에서 지도위에 마커올리는것이 잘 안됩니다.

nezz의 이미지

지도상에서 자신의 위치에서 가까운 버스정류장을 찾아주는 프로그램을 만들고 있습니다.
그런데 지도위에 마커올리려고 하면 자꾸 에러가 나버립니다.
일단 처음 실행후에 menu를 눌러 메뉴를 호출하고 그중에서 해당 버튼을 누르면
DB에 저장되어있는 정류장들을 조회해서 일정 거리안에 있는 버스정류장을 찾아서 지도상에 표시해주는 프로그램입니다.

소스코드는 이렇습니다.

/* 메인클레스 */
public boolean onOptionsItemSelected(MenuItem item){
        super.onOptionsItemSelected(item);
        switch(item.getItemId()){
            case(MENU_1):
                Resources r = getResources();
                List<Overlay> overlays = mapView.getOverlays();
                MyItemizedOverlay itemizedOverlay;
 
                Drawable marker = r.getDrawable(R.drawable.busstop);
                marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
                itemizedOverlay = new MyItemizedOverlay(marker);
 
                /* 가까운버스정류장조회 메뉴 */               
                TextView myLocationText;           
                myLocationText = (TextView)findViewById(R.id.myLocationText);
 
                Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setAltitudeRequired(false);
                criteria.setBearingRequired(false);
                criteria.setCostAllowed(true);
                criteria.setPowerRequirement(Criteria.POWER_LOW);           
                String provider = locationManager.getBestProvider(criteria, true);
                Location location = locationManager.getLastKnownLocation(provider);
                Double lat1 = location.getLatitude();
                Double lng1 = location.getLongitude();                               
 
                Cursor station = mDbHelper.getAllEntries();
 
                if (station.moveToFirst()) {
                    do {
                        Double lat2 = station.getDouble(station.getColumnIndexOrThrow(BusDbAdapter.KEY_LAT));
                        Double lng2 = station.getDouble(station.getColumnIndexOrThrow(BusDbAdapter.KEY_LNG));
                        double dist = distance(lat1,lng1,lat2,lng2);
                        if (dist <= 0.7) {
                            lat2 = lat2 * 1E6;
                            lng2 = lng2 * 1E6;
                            GeoPoint geoPoint = new GeoPoint(lat2.intValue(), lng2.intValue());
                            OverlayItem overlayitem = new OverlayItem(geoPoint, "", "");
                            itemizedOverlay.addOverlay(overlayitem);
                        }
                    } while(station.moveToNext());
                }
                overlays.add(itemizedOverlay);
                return true;
}
 
/* MyItemizedOverlay 클래스 */
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
    // 마커에 대한 정보를 가진 콜렉션
    private ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();   
 
    public MyItemizedOverlay(Drawable defaultMarker) {
        super(defaultMarker);
    }
 
    public void addOverlay(OverlayItem overlay){
        items.add(overlay);
        populate();
    }
    @Override
    protected OverlayItem createItem(int index) {
        return items.get(index);
    }
    @Override
    public int size() {
        return items.size();
    }
}

<수정> Logcat내용 첨부합니다. 01-05 01:04:01.322: ERROR/AndroidRuntime(285): ERROR: thread attach failed 01-05 01:04:04.932: ERROR/ActivityThread(292): Failed to find provider info for com.google.settings 01-05 01:04:04.953: ERROR/ActivityThread(292): Failed to find provider info for com.google.settings 01-05 01:04:05.012: ERROR/ActivityThread(292): Failed to find provider info for com.google.settings 01-05 01:04:07.452: ERROR/MapActivity(292): Couldn't get connection factory client 01-05 01:04:11.932: ERROR/LocationMasfClient(52): getNetworkLocation(): accuracy is too high 25000 01-05 01:04:33.052: ERROR/AndroidRuntime(292): Uncaught handler: thread main exiting due to uncaught exception 01-05 01:04:33.251: ERROR/AndroidRuntime(292): java.lang.NullPointerException 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at kr.mashup.map.Mashup_Map.onOptionsItemSelected(Mashup_Map.java:313) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.app.Activity.onMenuItemSelected(Activity.java:2170) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:525) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.view.View.onTouchEvent(View.java:4179) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.widget.TextView.onTouchEvent(TextView.java:6534) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.view.View.dispatchTouchEvent(View.java:3709) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.os.Handler.dispatchMessage(Handler.java:99) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.os.Looper.loop(Looper.java:123) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at android.app.ActivityThread.main(ActivityThread.java:4338) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at java.lang.reflect.Method.invokeNative(Native Method) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at java.lang.reflect.Method.invoke(Method.java:521) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-05 01:04:33.251: ERROR/AndroidRuntime(292): at dalvik.system.NativeStart.main(Native Method) 01-05 01:04:36.382: ERROR/NetworkLocationProvider(52): releaseCheckLocationLock: wake lock has already been released

이렇게 작성했습니다.
계속 프로그램이 에러가 나서 죽는데 무슨 이유일까요?
고수님들 알려주세요~!

moonspace의 이미지

혹시 버스 정류장 좌표는 어떻게 구하셨나요?
서울버스노선 엑셀파일을 wsg로 변환하였으나 오차가 너무 커서 쓸수가 없네요.
그리고 그 많은 데이터를 어떻게 얻어 오셨는지요?

해결 댓글이 아니라서 죄송하네요. 꾸~~벅

unsouled의 이미지

01-05 01:04:33.251: ERROR/AndroidRuntime(292): at kr.mashup.map.Mashup_Map.onOptionsItemSelected(Mashup_Map.java:313)

이 로그 보시면 아시겠지만, Mashup_Map.java 313 라인에서 NullPointerException 이 발생했습니다. 해당 라인에 Breakpoint 걸어보시고 왜 null 이 들어가는지 고민해 보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.