public class LocationMap extends MapActivity {
 LocationListener mLocationListener;
    MapView mapView;
    MapController mc;
    List<Overlay> overlay;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapview);
       
        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        mapView.setSatellite(false);
        mapView.setStreetView(true);  
        
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();         
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);         
        criteria.setPowerRequirement(Criteria.POWER_LOW);                   
          
        String provider = lm.getBestProvider(criteria, true);                
          
        mc = mapView.getController();
        
       
        mLocationListener = new LocationListener() {
         public void onLocationChanged(Location location) {
          overlay.removeAll(overlay);
          if (location != null) {
           //Toast.makeText(getBaseContext(), "위도는 " + location.getLatitude() + ", " + "경도는 " + location.getLongitude() + " 입니다.", Toast.LENGTH_LONG).show();
             
           GeoPoint gp = new GeoPoint((int) (location.getLatitude() * 1000000),(int) (location.getLongitude() * 1000000));
             
           mc.animateTo(gp);
           mc.setZoom(16);
            
              Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.state_icon);
           bitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, false);
           Drawable drawable = new BitmapDrawable(bitmap);
              
           MyIconItemizedOverlay mdio = new MyIconItemizedOverlay(drawable);
           OverlayItem overlayitem = new OverlayItem(gp, "", "");
           mdio.addOverlayItem(overlayitem);
              
           overlay = mapView.getOverlays();
           overlay.add(mdio);
            
          }
         }
         public void onProviderDisabled(String arg0) {
            
         }
         public void onProviderEnabled(String arg0) {
            
         }
         public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            
         }
        };
        lm.requestLocationUpdates(provider, 1000, 0, mLocationListener); 
    }
    @Override
    protected boolean isRouteDisplayed() {
     return false;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.removeUpdates(mLocationListener);
    }
}

 

mapview를 사용해 현재위치를 표시해주는 건데요.

위치가 변할때마다 마커가 찍혀서 마커가 여러개가 표시되는 문제를 해결하기위해서 overlay.removeAll(overlay); 를 넣어줘서 기존에 있던 기록을 없애게 해줬는데요.

overlay.removeAll(overlay); 이부분을 넣기전에는 잘되는데 추가한후에 멈춰버리네요. NullPointerException이라고 logcat에 뜨네요...

 

현재위치 표시해줄때 위치가 변할때마다 전에 찍혔던 마커는 없어지고 새로운 마커가 업데이트되게하려면 어떻게 해야하나요....

도와주세요~