Note that there are some explanatory texts on larger screens.

plurals
  1. POMap markers are throwing error while clicking in Android
    primarykey
    data
    text
    <p>I am making an app which shows google map with 5 connected coordinates. I am able to mark them with an icon. Now i am trying to show a dialog when we click on those markers but i am getting error. Please find the code as below. Any help would be much appreciated.</p> <p>This is my Main class.</p> <pre><code>public class MapConnect extends MapActivity implements LocationListener { private static final String TAG = "LocationActivity"; // public List&lt;Overlay&gt; mapOverlays; // public MyOwnLocationOverlay myLocationOverlay; public static MapConnect instance; public MapView mapView; protected LocationManager locationManager; public Button retrieveLocationButton; Geocoder geocoder; TextView locationText; Location location; MapController mapController; CountDownTimer locationtimer; GeoPoint point1 = new GeoPoint(29391748,13436279); GeoPoint point2 = new GeoPoint(28835050,14128418); GeoPoint point3 = new GeoPoint(28256006,13941650); GeoPoint point4 = new GeoPoint(28401065,13029785); GeoPoint point5 = new GeoPoint(29027355,12546387); // private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters // private static final long MINIMUM_TIME_BETWEEN_UPDATES = 9000; // in Milliseconds // MapOverlay mapOverlay = new MapOverlay(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map_connect); mapView = (MapView) findViewById(R.id.map_view); MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); mapView.getOverlays().add(myLocationOverlay); mapView.postInvalidate(); myLocationOverlay.enableMyLocation(); mapView.setBuiltInZoomControls(true); locationText = (TextView)this.findViewById(R.id.lblLocationInfo); mapController = mapView.getController(); mapView.setSatellite(false); mapController.setZoom(8); retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button); // GeoPoint point1 = new GeoPoint(29391748,13436279); // GeoPoint point2 = new GeoPoint(28835050,14128418); // GeoPoint point3 = new GeoPoint(28256006,13941650); // GeoPoint point4 = new GeoPoint(28401065,13029785); // GeoPoint point5 = new GeoPoint(29027355,12546387); MapOverlay mapOvlay = new MapOverlay(point1, point2,point3,point4,point5); //mapController.setCenter(point4); mapView.getOverlays().add(mapOvlay); List&lt;Overlay&gt; mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.pin); HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable); OverlayItem overlayitem = new OverlayItem(point1, null, null); OverlayItem overlayitem1 = new OverlayItem(point2, null, null); OverlayItem overlayitem2 = new OverlayItem(point3, null, null); OverlayItem overlayitem3 = new OverlayItem(point4, null, null); OverlayItem overlayitem4 = new OverlayItem(point5, null, null); itemizedoverlay.addOverlay(overlayitem); itemizedoverlay.addOverlay(overlayitem1); itemizedoverlay.addOverlay(overlayitem2); itemizedoverlay.addOverlay(overlayitem3); itemizedoverlay.addOverlay(overlayitem4); mapOverlays.add(itemizedoverlay); } public class MapOverlay extends com.google.android.maps.Overlay { private GeoPoint mGpt1; private GeoPoint mGpt2; private GeoPoint mGpt3; private GeoPoint mGpt4; private GeoPoint mGpt5; protected MapOverlay(GeoPoint gp1, GeoPoint gp2,GeoPoint gp3,GeoPoint gp4,GeoPoint gp5 ) { mGpt1 = gp1; mGpt2 = gp2; mGpt3 = gp3; mGpt4 = gp4; mGpt5 = gp5; mapController.setCenter(gp3); } @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); Paint paint; paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true); paint.setStyle(Style.STROKE); paint.setStrokeWidth(2); Point pt1 = new Point(); Point pt2 = new Point(); Point pt3 = new Point(); Point pt4 = new Point(); Point pt5 = new Point(); Projection projection = mapView.getProjection(); projection.toPixels(mGpt1, pt1); projection.toPixels(mGpt2, pt2); projection.toPixels(mGpt3, pt3); projection.toPixels(mGpt4, pt4); projection.toPixels(mGpt5, pt5); canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint); canvas.drawLine(pt2.x, pt2.y, pt3.x, pt3.y, paint); canvas.drawLine(pt3.x, pt3.y, pt4.x, pt4.y, paint); canvas.drawLine(pt4.x, pt4.y, pt5.x, pt5.y, paint); canvas.drawLine(pt5.x, pt5.y, pt1.x, pt1.y, paint); return true; } } // public void drawMyLocation(Canvas canvas,MapView mapView,location,point,Long 1000); public void showsat(View view){ mapView.setSatellite(true); } public void showcurrentlocation(View view) { // mapView.getOverlays().clear(); // mapOverlays = mapView.getOverlays(); // // myLocationOverlay = new MyOwnLocationOverlay(GMapsActivity.this, mapView); // myLocationOverlay.setMeters(10); // myLocationOverlay.enableCompass(); // myLocationOverlay.enableMyLocation(); // myLocationOverlay.runOnFirstFix(new Runnable() { // public void run() { // mapController.animateTo(myLocationOverlay.getMyLocation()); // } // }); // mapView.getOverlays().add(myLocationOverlay); } mapView.setSatellite(false); geocoder = new Geocoder(MapConnect.this); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); // add this overlay to the MapView and refresh it if (location != null) { Log.d(TAG, location.toString()); this.onLocationChanged(location); //&lt;6&gt; } } // @Override public void onBackPressed() { // do something on back. MapOverlay mapOvlay = new MapOverlay(point1, point2,point3,point4,point5); mapView.getOverlays().add(mapOvlay); // finish(); return; } public void finish() { // do something on back. finish(); return; } @Override public void onLocationChanged(Location location) { Log.d(TAG, "onLocationChanged with location " + location.toString()); String text = String.format("Lat:\t %f\nLong:\t %f\nAlt:\t %f\nBearing:\t %f", location.getLatitude(),location.getLongitude(), location.getAltitude(), location.getBearing()); this.locationText.setText(text); try { List&lt;Address&gt; addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10); //&lt;10&gt; for (Address address : addresses) { this.locationText.append("\n" + address.getAddressLine(0)); } int latitude = (int)(location.getLatitude() * 1000000); int longitude = (int)(location.getLongitude() * 1000000); GeoPoint point = new GeoPoint(latitude,longitude); mapController.animateTo(point); //&lt;11&gt; } catch (IOException e) { Log.e("LocateMe", "Could not get Geocoder data", e); } // } @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 } // @Override protected void onResume() { // LocationListener locationListener = new LocationListener(){ // super.onResume(); // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this); //&lt;7&gt; // } // @Override protected void onPause() { // super.onPause(); // locationManager.removeUpdates(this); //&lt;8&gt; // // } //@Override //protected void onResume() { // super.onResume(); // // // when our activity resumes, we want to register for location updates // // // myLocationOverlay.enableMyLocation(); // //} // //@Override //protected void onPause() { // super.onPause(); // // // when our activity pauses, we want to remove listening for location updates // // myLocationOverlay.disableMyLocation(); // //} @Override protected boolean isRouteDisplayed() { return false; } } </code></pre> <p>Now the Itemized Overlay class:</p> <pre><code>public class HelloItemizedOverlay extends ItemizedOverlay { private ArrayList&lt;OverlayItem&gt; mOverlays = new ArrayList&lt;OverlayItem&gt;(); private Context mContext; public HelloItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } 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(); } // @Override // protected boolean onTap(int index) { // AlertDialog.Builder dialog = new AlertDialog.Builder(MapConnect.instance); // switch (index) { // case 0: // Toast.makeText(MapConnect.instance, "GeoLocation : 0", // Toast.LENGTH_LONG).show(); // dialog.show(); // break; // } // // return true; // } @Override protected boolean onTap(final int index) { final OverlayItem id = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(MapConnect.instance); dialog.setTitle("your title"); dialog.setMessage("youmessage"); //dialog.setNegativeButton("Cancel", null); dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { dialog.dismiss(); } }); dialog.show(); return true; } } </code></pre> <p>This is the Logcat error i am getting:</p> <pre><code>2-06 07:17:34.822: E/InputEventReceiver(6112): Exception dispatching input event. 02-06 07:17:34.822: E/MessageQueue-JNI(6112): Exception in MessageQueue callback: handleReceiveCallback 02-06 07:17:34.893: E/MessageQueue-JNI(6112): java.lang.NullPointerException 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.app.AlertDialog$Builder.&lt;init&gt;(AlertDialog.java:360) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.example.mapconnect.HelloItemizedOverlay.onTap(HelloItemizedOverlay.java:58) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:358) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:562) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at com.google.android.maps.MapView.onTouchEvent(MapView.java:685) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.View.dispatchTouchEvent(View.java:7239) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 02-06 07:17:34.893: E/MessageQueue-JNI(6112): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload