Mapas de Android NullPointerException ItemizedOverlay

Esto no se refiere a ninguna parte de mi código en absoluto. ¿Cómo hago para llegar al fondo de ella?

java.lang.NullPointerException at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42) at com.google.android.maps.MapView.onDraw(MapView.java:494) at android.view.View.draw(View.java:6739) at android.view.ViewGroup.drawChild(ViewGroup.java:1648) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) at android.view.ViewGroup.drawChild(ViewGroup.java:1646) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) at android.view.View.draw(View.java:6742) at android.widget.FrameLayout.draw(FrameLayout.java:352) at android.view.ViewGroup.drawChild(ViewGroup.java:1648) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) at android.view.View.draw(View.java:6742) at android.widget.FrameLayout.draw(FrameLayout.java:352) at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1872) at android.view.ViewRoot.draw(ViewRoot.java:1422) at android.view.ViewRoot.performTraversals(ViewRoot.java:1167) at android.view.ViewRoot.handleMessage(ViewRoot.java:1744) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:144) at android.app.ActivityThread.main(ActivityThread.java:4937) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) 

Aquí está el método de dibujo del ItemizedOverlay

 public void draw(Canvas canvas, MapView mapView, boolean shadow) { try { super.draw(canvas, mapView, false); if (getMainOverlayArray().size() != 0){ pfOverlayItem tempOver = null; for (int i = 0; i < getMainOverlayArray().size(); i++) { tempOver = getMainOverlayArray().get(i); boolean isMatch = false; if (tempOver.getTitle().equals(selectedName)) { isMatch = true; } if (isMatch){ Projection projection = mapView.getProjection(); Point point = new Point(); projection.toPixels(tempOver.getPoint(), point); Paint background = new Paint(); background.setColor(Color.WHITE); background.setAlpha(150); RectF rect = new RectF(); rect.set(point.x - 55, point.y +15, point.x + 100, point.y + 65); canvas.drawRoundRect(rect, 5, 5, background); Paint text = new Paint(); text.setAntiAlias(true); text.setColor(Color.BLUE); text.setTextSize(14); text.setTypeface(Typeface.MONOSPACE); canvas.drawText(tempOver.getTitle() , point.x -50 , point.y + 30, text); canvas.drawText(tempOver.getTypeTextOut(), point.x -50 , point.y + 45, text); canvas.drawText(tempOver.getdestination(), point.x -50 , point.y + 60, text); } } } }catch (Exception e){ Log.e("Error", "Problem drawing view", e); e.printStackTrace(); } } 

¡Ahora imprimo hacia fuera el stacktrace y ninguna diferencia! Unesdoc.unesco.org

¿Alguien tiene alguna idea que podría ayudar a llegar al fondo de esto?

EDIT – Código más reciente 28/11 FULL CLASS

  private class SitesOverlay extends ItemizedOverlay<pfOverlayItem> { private List<pfOverlayItem> items = new ArrayList<pfOverlayItem>(); private PopupPanel panel=new PopupPanel(R.layout.popup); private MapLocation selectedMapLocation; private static final int CIRCLERADIUS = 2; private ArrayList<pfOverlayItem> mOverlays = new ArrayList<pfOverlayItem>(); public SitesOverlay() { super(null); //super(boundCenter(defaultMarker)); //items = getMainOverlayArray(); //items = mOverlays; populate(); } public void finishedLoading(){ populate(); } @Override protected pfOverlayItem createItem(int i) { // Log.i("CREATE","MARKER"); return (items.get(i)); } public void addItem(OverlayItem overlay) { overlay.setMarker(boundCenter(overlay.getMarker(0))); items.add((pfOverlayItem) overlay); //populate(); } public void clearItems(){ runOnUiThread(new Runnable() { public void run() { items.clear(); myMapView.invalidate(); } }); } public void clear() { mOverlays.clear(); myMapView.removeAllViews(); //numItems = 0; // Workaround for another bug with this class: // http://groups.google.com/group/android-developers/browse_thread/thread/38b11314e34714c3 setLastFocusedIndex(-1); populate(); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, false); try { if (getMainOverlayArray().size() != 0){ pfOverlayItem tempOver = null; for (int i = 0; i < getMainOverlayArray().size(); i++) { tempOver = getMainOverlayArray().get(i); boolean isMatch = false; //Log.i("Selected Name",selectedName); if (tempOver.getTitle().equals(selectedName)) { isMatch = true; } if (isMatch){ Projection projection = mapView.getProjection(); Point point = new Point(); projection.toPixels(tempOver.getPoint(), point); Paint background = new Paint(); background.setColor(Color.WHITE); background.setAlpha(150); RectF rect = new RectF(); rect.set(point.x - 50, point.y +15, point.x + 90, point.y + 50); canvas.drawRoundRect(rect, 5, 5, background); Paint text = new Paint(); text.setAntiAlias(true); text.setColor(Color.BLUE); text.setTextSize(14); text.setTypeface(Typeface.MONOSPACE); //canvas.drawRoundRect(rect, 2, 2, background); canvas.drawText(tempOver.getTitle() + " " + tempOver.getcallsign(), point.x -50 , point.y + 30, text); canvas.drawText(tempOver.getdestination() + " " + tempOver.getdraft(), point.x -50 , point.y + 45, text); } } } }catch (Exception e){ Log.e("Error", "Problem drawing view", e); e.printStackTrace(); } } @Override protected boolean onTap(int i) { pfOverlayItem item = getItem(i); if (selectedName.equals(item.getTitle())){ //Toast.makeText(PlaneFinderMain.this, "SECOND MOFO PRESS", 3000).show(); try{ Intent myIntent = new Intent(PlaneFinderMain.this, DetailActivity.class); myIntent.putExtra( "int", i); myIntent.putExtra( "string", selectedName ); PlaneFinderMain.this.startActivity(myIntent); }catch (Exception e){ Log.e("Error", "Cannot launch", e); } } currentadshex = item.getmmsi(); new GetRouteTask(item.getmmsi()).execute(); selectedItem = i; selectedName = item.getTitle(); selectedPlanePoint = item.getPoint(); GeoPoint geo=item.getPoint(); Point pt=myMapView.getProjection().toPixels(geo, null); View view=panel.getView(); ((TextView)view.findViewById(R.id.reg)).setText(item.getTitle()); ((TextView)view.findViewById(R.id.flightno)).setText(item.getcallsign()); ((TextView)view.findViewById(R.id.route)).setText(item.getdestination()); ((TextView)view.findViewById(R.id.height)).setText(item.getdraft()); return (true); } @Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { if (event.getAction() == MotionEvent.ACTION_DOWN){ if (selectedPlanePoint != null){ Projection projection = mapView.getProjection(); Point point = new Point(); projection.toPixels(selectedPlanePoint, point); Point pointHit = new Point(); pointHit.x=(int)event.getX(); pointHit.y=(int)event.getY(); if ((point.x - pointHit.x) >-100 && (point.x - pointHit.x) <70 && (point.y - pointHit.y) < -25 && (point.y - pointHit.y) > -95){ try{ Intent myIntent = new Intent(PlaneFinderMain.this, DetailActivity.class); myIntent.putExtra( "int", selectedItem); myIntent.putExtra( "string", selectedName ); PlaneFinderMain.this.startActivity(myIntent); }catch (Exception e){ Log.e("Error", "Cannot launch", e); } }else{ } } } return false; } @Override public int size() { return (items.size()); } public void addOverlay(OverlayItem o){ setLastFocusedIndex(-1); populate(); } } 

2 Solutions collect form web for “Mapas de Android NullPointerException ItemizedOverlay”

En realidad el problema no está en la implementación de su ItemizedOverlay, sino en la implementación de su MapActivity. Como se puede ver a partir de un seguimiento de pila similar aquí en la línea 42, el OverlayBundle está llamando al método draw () de una superposición. Esto señala una superposición nula que agregó a su mapView en algún lugar.

Algunos consejos útiles: Definitivamente debe pasar un dibujable a su super constructor (utilizado de hit-testing) por uncommenting la primera línea de código que ya tiene en allí:

  public SitesOverlay() { //super(null); super(boundCenter(defaultMarker)); //items = getMainOverlayArray(); //items = mOverlays; populate(); } 

Y potencialmente no llamar a super.draw () en su método draw ().

  @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { // why do you do this if you paint it yourself later on. super.draw(canvas, mapView, false 

Lo más probable es que tenga que hacer las dos cosas.

Editar: Vamos a pensar en que definitivamente debe pasar un dibujable a su super constructor, ya que se utiliza para las pruebas de éxito. Se modificó el texto anterior para reflejarlo.

  pfOverlayItem tempOver = null; for (int i = 0; i < getMainOverlayArray().size(); i++) { tempOver = getMainOverlayArray().get(i); boolean isMatch = false; if (tempOver.getTitle().equals(selectedName)) { isMatch = true; } 

¿El tempOver no es asignado?

 canvas.drawText(tempOver.getTitle() , point.x -50 , point.y + 30, text); canvas.drawText(tempOver.getTypeTextOut(), point.x -50 , point.y + 45, text); canvas.drawText(tempOver.getdestination(), point.x -50 , point.y + 60, text); 

Es tempOver.getTitle (), .getTypeTextOut (), o .getdestination () null?

  • Cómo guardar la superposición con vista previa de la cámara en android?
  • Captura de captura de pantalla en el teléfono Android durante la reproducción de vídeo y vista previa de la cámara
  • Imagen sobre otra imagen Android
  • Cómo obtener fechas de la base de datos y comprobar si se solapan?
  • Texto que no se muestra en la superposición de MapView
  • Animación de superposición de Facebook
  • ¿Cómo grabar video con superposición animada en Android?
  • Android - vistas de servicio
  • Cómo agregar vista de superposición sobre otra vista en android?
  • Android: ¿Cómo overlay-a-bitmap / draw-over un mapa de bits?
  • Superposición de imagen en dos filas en una vista de lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.