Autore Topic: NullPointerException con Overlay  (Letto 620 volte)

Offline daveblack

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: 0
    • http://www.linkedin.com/profile/view?id=155824415&trk=tab_pro
    • Mostra profilo
    • DC Hall
  • Dispositivo Android:
    Samsung Galaxy Next
  • Sistema operativo:
    Mac OSX 10.7 Lion
NullPointerException con Overlay
« il: 28 Aprile 2012, 12:16:15 CEST »
0
Salve a tutti, continuo a ricevere questo errore:
Codice: [Seleziona]
04-28 12:07:28.744: ERROR/AndroidRuntime(16400): java.lang.NullPointerException
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:643)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.View.dispatchTouchEvent(View.java:3766)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1731)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1120)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1715)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1787)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.os.Looper.loop(Looper.java:123)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at android.app.ActivityThread.main(ActivityThread.java:4633)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at java.lang.reflect.Method.invokeNative(Native Method)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at java.lang.reflect.Method.invoke(Method.java:521)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-28 12:07:28.744: ERROR/AndroidRuntime(16400):     at dalvik.system.NativeStart.main(Native Method)

Utilizzando questo codice:
Codice (Java): [Seleziona]
Thread t = new Thread(new Runnable(){

                                @Override
                                public void run() {
                                        float currentCenterLatitude = (float) (0.000001*getMapCenterLatitudeE6());
                                        float currentCenterLongitude = (float) (0.000001*getMapCenterLongitudeE6());
                                        float currentLatitudeSpan =  (float) (0.000001*getMapLatitudeSpan());
                                        float currentLongitudeSpan =  (float) (0.000001*getMapLongitudeSpan());
                                        float maxLat = currentCenterLatitude + (currentLatitudeSpan/2);
                                        float maxLng = currentCenterLongitude + (currentLongitudeSpan/2);
                                        float minLat = currentCenterLatitude - (currentLatitudeSpan/2);
                                        float minLng = currentCenterLongitude - (currentLongitudeSpan/2);
                                       
                                        Log.i("ST_INFO", "MAX LAT: "+maxLat);
                                        Log.i("ST_INFO", "MAX LNG: "+maxLng);
                                        Log.i("ST_INFO", "MIN LAT: "+minLat);
                                        Log.i("ST_INFO", "MIN LNG: "+minLng);
                           
                                        List<Overlay> overlaysMappa = mappa.getOverlays();
                                        POIFermate overlays = new POIFermate(pin,c);
                                        LinkedList<Fermata> fermate = new LinkedList<Fermata>();
                                        fermate = MFermate.getFermateByGPSSquare(maxLat, maxLng, minLat, minLng);
                                       
                                        Log.i("ST_INFO", "FERMATE SIZE: "+fermate.size());
                                        for(int i=0; i<fermate.size(); i++){
                                                GeoPoint coord = new GeoPoint((int)(fermate.get(i).getLatitudine()*1000000), (int)(fermate.get(i).getLongitudine()*1000000));
                                                OverlayItem FPin = new OverlayItem(coord, fermate.get(i).getNome(), "");
                                                overlays.addOverlay(FPin);
                                        }
                                    overlaysMappa.add(overlays);
                                       
                                }
                               
                        });
                        t.start();

La mia classe POIFermate è:
Codice (Java): [Seleziona]
public class POIFermate extends ItemizedOverlay {
       
        private ArrayList<OverlayItem> fermate = new ArrayList<OverlayItem>();
        private Context mContext;

        public POIFermate(Drawable defaultMarker, Context c) {
                super(boundCenterBottom(defaultMarker));
                this.mContext = c;
        }

        @Override
        protected OverlayItem createItem(int i) {
                return this.fermate.get(i);
        }

        @Override
        public int size() {
                return this.fermate.size();
        }
       
        @Override
        protected boolean onTap(int index){
                if(this.size()>index){
                        OverlayItem item = this.fermate.get(index);
                        AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
                        dialog.setTitle(item.getTitle());
                        dialog.setMessage(item.getSnippet());
                        dialog.show();
                }
                return true;
        }
       
        public void addOverlay(OverlayItem overlay){
                this.fermate.add(overlay);
                this.populate();
        }

}

Qualcuno sa spiegarmi perché ricevo ogni volta questa Exception? Il logcat non mi dice qual'è la causa!