2011-02-26 9 views
0

안녕하세요 나는지도보기 및 mapOverlays 만들려면이 가이드를 사용하고 있습니다 :프로그램이 왜 충돌합니까?

내 mapoverlay (mapItem) : 여기 http://developer.android.com/resources/tutorials/views/hello-mapview.html

와 내 코드입니다

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private Context mContext; 

public MapItem(Drawable defaultMarker) { 
    super(boundCenterBottom(defaultMarker)); 

} 

public MapItem(Drawable defaultMarker, Context context) { 
    super(boundCenterBottom(defaultMarker)); 
    mContext = context; 
} 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

@Override 
protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 

@Override 
public int size() { 
    return mOverlays.size(); 
} 

//remove oldest element 
public void remove(){ 
     mOverlays.remove(0); 
} 

@Override 
protected boolean onTap(int index) { 
    OverlayItem item = mOverlays.get(index); 
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); //row 50 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    return true; 
} 

}

내 mapview 클래스 (mapViewActivity) :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mapview); 
    setupListener(); 

    final MapView mapView = (MapView) findViewById(R.id.mapview); 
    mapController = mapView.getController(); 
    mapView.setBuiltInZoomControls(true); 
    mapView.setClickable(true); 

    //Store resources 
    final List<Overlay> storeOverlays = mapView.getOverlays(); 
    Drawable storePic = this.getResources().getDrawable(R.drawable.storemarker); 
    final MapItem itemizedStoreOverlay = new MapItem(storePic); 

    mapController.setZoom(13); // defualt zoom 

    //Plot all stores on the map 
    df = ((ClassHandler)getApplication()).getDatabaseFacade(); 

    Cursor plotstore = df.getAllStorePos("Göteborg"); 
    startManagingCursor(plotstore); 
    plotstore.moveToFirst(); 

    while(plotstore.isAfterLast() == false){ 

     GeoPoint addStore = new GeoPoint(plotstore.getInt(plotstore.getColumnIndex("lat")), plotstore.getInt(plotstore.getColumnIndex("long"))); 
     OverlayItem overlayitem = new OverlayItem(addStore, plotstore.getString(plotstore.getColumnIndex("_id")), plotstore.getString(plotstore.getColumnIndex("address"))); 

     itemizedStoreOverlay.addOverlay(overlayitem); 
     storeOverlays.add(itemizedStoreOverlay); 
     plotstore.moveToNext(); 
    } 

     //Get current position 
     LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locationListener = new LocationListener() { 
      public void onLocationChanged(Location location) { 
       GeoPoint currentPos = new GeoPoint((int)(location.getLatitude()*1000000), (int)(location.getLongitude()*1000000)); 
       mapController.animateTo(currentPos); 
     }    


     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, 
       Bundle extras) { 
      // TODO Auto-generated method stub 

     } 
    }; 
    locationManager.requestLocationUpdates(
      LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

    //add current position 
    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); 
    mapView.getOverlays().add(myLocationOverlay); 
    myLocationOverlay.enableMyLocation(); 

    //myLocationOverlay.disableMyLocation(); 
} 

private void setupListener() { 

    MapListener listener = new MapListener(); 
} 

}

문제는 내가 storemarker에 누를 때 내 프로그램이 오류와 충돌한다는 것입니다 : mapItem의 행 (50) 내 mapoverlay에 표시되어 http://elysobi.kjm.sgsnet.se:81/public/Android/ERROR.png

.

누구에게 무슨 문제가 있는지 알고 있습니까?

/감사합니다, Ben.

+0

1) mContext가 초기화 되었습니까? 2) MapItem의 2 가지 버전이 있습니다. 첫 번째 버전은 mContext를 초기화하지 않습니다. – fazo

답변

1

컨텍스트를 전달하지 않는 잘못된 생성자를 호출하는 것처럼 보입니다.

final MapItem itemizedStoreOverlay = new MapItem(storePic); // No context. 
+0

최종 MapItem itemizedStoreOverlay = 새 MapItem (storePic, this); –

관련 문제