This does not apply to all my code at all. How do I get to the end?
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)
Here is an example of the ItemizedOverlay method
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(); } }
Now I will print stacktrace and no difference !: - (
Does anyone have any ideas that could help sort this out?
EDIT - Last Code 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(); } }