Autore Topic: tanti marker su MapView  (Letto 590 volte)

Offline Vincent

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +2
    • Mostra profilo
tanti marker su MapView
« il: 08 Settembre 2011, 18:38:02 CEST »
0
Salve a tutti. Dovrei aprire una MapView e posizionare diversi marker su di essa basandomi sui risultati di un cursore.
Ecco il mio codice:

Codice (Java): [Seleziona]
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.s5);
       
        ProtApplication application;
        application = (ProtApplication) this.getApplication();
        user = application.getState();
       
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        String locProvider = locManager.getBestProvider(criteria, true);
        MyLocationListener locationListener = new MyLocationListener();
        locManager.requestLocationUpdates(locProvider, 10000L, 10.0f, locationListener);
        myLocation = locManager.getLastKnownLocation(locProvider);
       
        mapView = (MapView) findViewById(R.id.mapView);
       
        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
        View zoomView = mapView.getZoomControls();
 
        zoomLayout.addView(zoomView,
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        mapView.displayZoomControls(true);
       
        mc = mapView.getController();
        p = new GeoPoint(
                (int) (myLocation.getLatitude()* 1E6),
                (int) (myLocation.getLongitude() * 1E6));
       
        mapOverlays = mapView.getOverlays();
        drawable = this.getResources().getDrawable(R.drawable.posizione_icona);
        itemizedOverlay = new PoiItamizedOverlay(drawable);
        OverlayItem overlayitem = new OverlayItem(p, "", "");
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);
     
        mc.animateTo(p);
       

        String[] args = {user};
        Cursor c = getContentResolver().query(ProjectProvider.Poi.CONTENT_URI, null, "user=?", args, null);
        Log.d(TAG,"cursore: "+c.getCount());
       
        c.moveToFirst();
        while(c!=null) {
                p2 = new GeoPoint(
                    (int) (Double.parseDouble(c.getString(c.getColumnIndex("lat")))* 1E6),
                    (int) (Double.parseDouble(c.getString(c.getColumnIndex("long")))* 1E6));
           
                categoria = c.getString(c.getColumnIndex("category"));
                if(categoria.equals("ristorante")) {
                drawable2 = this.getResources().getDrawable(R.drawable.ristorante_icona);
              } else if(categoria.equals("museo")) {
                drawable2 = this.getResources().getDrawable(R.drawable.museo_icona);
              } else if(categoria.equals("cinema")) {
                drawable2 = this.getResources().getDrawable(R.drawable.cinema_icona);
              } else if(categoria.equals("shopping")) {
                drawable2 = this.getResources().getDrawable(R.drawable.shopping_icona);
              } else {
                drawable2 = this.getResources().getDrawable(R.drawable.bar_icona);
              }
               
            itemizedOverlay2 = new PoiItamizedOverlay(drawable2);
            OverlayItem overlayitem2 = new OverlayItem(p2, "", "");
            itemizedOverlay.addOverlay(overlayitem2);
            mapOverlays.add(itemizedOverlay2);
           
            if(!c.moveToNext()){
                break;
            }
        }
        }

Utilizzo un PoiItamizedOverlay, cioè un ItemizedOverlay definito da me. L'ItemizedOverlay in generale funziona perchè utilizzato in un'altra activity e non dà problemi.
Il problema è che quando apro questa activity che vi ho indicato sopra, la MapView viene aperta e anche i marker vengono posizionati (anche se tutti con la stessa immagine e non con immagini diverse), quando tocco però la mappa l'activity va in crash.
Ecco il logcat dell'errore:


Codice (Java): [Seleziona]
09-08 18:11:32.777: DEBUG/dalvikvm(5214): GC freed 694 objects / 56696 bytes in 110ms
09-08 18:11:33.827: DEBUG/dalvikvm(103): GC freed 173 objects / 7648 bytes in 91ms
09-08 18:11:34.516: DEBUG/AndroidRuntime(5214): Shutting down VM
09-08 18:11:34.516: WARN/dalvikvm(5214): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
09-08 18:11:34.516: ERROR/AndroidRuntime(5214): Uncaught handler: thread main exiting due to uncaught exception
09-08 18:11:34.546: ERROR/AndroidRuntime(5214): java.lang.NullPointerException
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:625)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.View.dispatchTouchEvent(View.java:3709)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.os.Looper.loop(Looper.java:123)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at android.app.ActivityThread.main(ActivityThread.java:4363)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at java.lang.reflect.Method.invokeNative(Native Method)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at java.lang.reflect.Method.invoke(Method.java:521)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-08 18:11:34.546: ERROR/AndroidRuntime(5214):     at dalvik.system.NativeStart.main(Native Method)
09-08 18:11:34.576: INFO/Process(58): Sending signal. PID: 5214 SIG: 3

Offline Vincent

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +2
    • Mostra profilo
Re:tanti marker su MapView
« Risposta #1 il: 08 Settembre 2011, 19:02:09 CEST »
0
ho risolto il problema di prima, a quanto pare un piccolo bug.

Adesso vorrei capire come mai anzicchè usare diversi marker vengono visualizzati una sola immagine per tutti i punti della mappa