androidandroid-maps

How to refresh the coordinates in Google maps?


I can refresh the google map on refresh button click, but it is showing me the old coordinates. And in some areas it shows the rectangle image with a cross image in it. Where is the error or what modification I have to do in it?

This is my code:

public class GmapActivity extends MapActivity {Mapview map;Button btnrefresh;Button btnbacktolist; int chargenumber=0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gmapactivity);

    final Bundle bundle = this.getIntent().getExtras();
    chargenumber = bundle.getInt("ChargeNumber");
    int latitude = bundle.getInt("latitude");
    int longitude = bundle.getInt("longitute");
    CreateMap(latitude, longitude);
    
    btnrefresh = (Button) findViewById(R.id.btnReload);
    btnrefresh.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
        
            RefreshMap();
        }
    });

    btnbacktolist = (Button) findViewById(R.id.btnBack);
    btnbacktolist.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            BacktoScheduleList(bundle);
        }
    });

    

}

protected void BacktoScheduleList(Bundle bundle) {

    ProgressDialog progressDialog = ProgressDialog.show(this, "",
            "Please wait...", true);
    bundle = this.getIntent().getExtras();
    Bundle Newbundle = new Bundle();
    Newbundle.putString("userid", bundle.getString("userid").trim());
    Newbundle.putString("username", bundle.getString("username").trim());
    Intent intent = new Intent(this, Ok.class);
    intent.putExtras(bundle);
    startActivityForResult(intent, 0);
    progressDialog.dismiss();
    finish();

}

private void CreateMap(int latitude, int longitude) {



    map = (MapView) findViewById(R.id.mvView);
    map.setBuiltInZoomControls(true);
    map.setStreetView(true);
    List<Overlay> mapOverlays = map.getOverlays();
    Drawable drawable = this.getResources().getDrawable(
            R.drawable.school_bus);
    MOverlayItems itemizedOverlay = new MOverlayItems(drawable, this);
    GeoPoint point = null;
    point = new GeoPoint(latitude, longitude);
    OverlayItem overlayitem = new OverlayItem(point, null, null);
    itemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedOverlay);
    MapController mapController = map.getController();
    mapController.animateTo(point);
    mapController.setZoom(12);

}

protected void RefreshMap() {
    map.getOverlays().clear();
    map.clearAnimation();
    WebServiceCaller webservicecaller = new WebServiceCaller();
    String result = webservicecaller.GetLatLong(chargenumber);

    if (result.toString().equalsIgnoreCase("false")) {

    } else {
        StringTokenizer tokens = new StringTokenizer(result, ",");
        int latitude = Integer.parseInt(tokens.nextToken());
        int longitude = Integer.parseInt(tokens.nextToken());
        ProgressDialog progressDialog = ProgressDialog.show(this, "",
                "Refreshing. Please wait...", true);
        CreateMap(latitude, longitude);
        progressDialog.dismiss();
    }
}

protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}
}

Solution

  • I use it the following way and it is working properly for me. Probably you nedd also a map.invalidate() call.

    protected void RefreshMap() {
      map.getOverlays().clear();
      map.invalidate();
    
      ... create itemizedOverlay
    
      map.getOverlays().add(itemizedOverlay);
      map.invalidate();
      map.getController().animateTo(point);
    }