1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Fehler beim Setzen von Marker

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von husvun41, 23.05.2011.

  1. husvun41, 23.05.2011 #1
    husvun41

    husvun41 Threadstarter Gast

    Erstelle gerade ein App mit Google Maps und wollte jetzt auch noch Marker einfügen.

    Hab mich genau an diese Anleitung gehalten und er zeigt auch keine Fehler an, bis ich zum Schluss noch diese beiden Zeilen eintrage:

    Code:
    itemizedoverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedoverlay);
    Dann kommt nämlich ein Fehler bei .add, wo er mir sagt ich soll es in .addAll ändern, dann geht aber auch nichts.

    Hier mal mein Code:

    Code:
    import java.util.List;
    
    import com.google.android.maps.MapActivity;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Point;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.KeyEvent;
    
    import com.google.android.maps.MapController;
    import com.google.android.maps.MapView;
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.Overlay;
    import com.google.android.maps.OverlayItem;
    
    public class BankomatMarkers extends MapActivity 
    {
        private MapView mapView;
        private MapController mc;
        private GeoPoint p;
      
        
    
    
        public BankomatMarkers(Drawable drawable2) {
            // TODO Auto-generated constructor stub
        }
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        
    
            mapView = (MapView) findViewById(R.id.mapView);
            mapView.setBuiltInZoomControls(true); //Zoom-Buttons aktivieren
            
    
            mc = mapView.getController();
            String coordinates[] = {"48.196379", "16.369746"}; //Start-Koordinaten
            double lat = Double.parseDouble(coordinates[0]);
            double lng = Double.parseDouble(coordinates[1]);
         
            p = new GeoPoint(
                (int) (lat * 1E6), 
                (int) (lng * 1E6));
    
            mc.animateTo(p);
            mc.setZoom(17); //Zoom-Faktor beim Start
            
            mapView.invalidate();
    
    
            List<Overlay> items = mapView.getOverlays();
            Drawable drawable = this.getResources()
                    .getDrawable(R.drawable.bankomatsymbol);
            //Passes drawable(jd sports logo) into HelloItemizedOverlay class
            BankomatMarkers itemizedoverlay = 
                    new BankomatMarkers(drawable);
    
            double latitude = 51.545538;
            double longitude = -0.477247;
            GeoPoint point = new GeoPoint((int)(latitude * 1e6), 
                    (int)(longitude * 1e6));
    
            OverlayItem overlayitem = new OverlayItem(point, "JD Sports", 
                    "This is a sports shop");
    
            itemizedoverlay.addOverlay(overlayitem);
            items.add(itemizedoverlay);
    
    
    
        }
    
        private void addOverlay(OverlayItem overlayitem) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            return false;
        }
    
    }
    
    Dieser Fehler wird angezeigt:

    the method add(overlay) in the type List<Overlay> is not applicable for the arguments

    Hat jemand eine Idee?

    Danke schonmal im voraus.

    -Soopaman_FU
     
    Zuletzt von einem Moderator bearbeitet: 23.05.2011
  2. Thyrion, 23.05.2011 #2
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,849
    Erhaltene Danke:
    2,452
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Dein overlayitem ist von der Klasse OverlayItem abgeleitet. Deine Liste erwartet eine Instanz von Overlay. Jetzt verlassen mich auch meine Kenntnisse, da ich gerade nicht weiß, ob OverlayItem von Overlay abgeleitet wurde oder nicht.
     
  3. husvun41, 23.05.2011 #3
    husvun41

    husvun41 Threadstarter Gast

    Danke für die Antwort, aber was muss ich jetzt machen? Bin noch ein Android Neuling.
     
  4. Kranki, 23.05.2011 #4
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Zunächstmal würd ich die Variablenbenennungen so ändern, dass sie zu den Typen passen. Das Hauptproblem scheint mir das Verständnis zu sein, was was ist, weil du mit den Typen durcheinanderkommst.
    Code:
    List<Overlay> items = mapView.getOverlays();
    Das sind keine Items, das sind Overlays, die womöglich Items enthalten. Wenn du nicht jedes Item auf sein eigenes Overlay packen willst (was ich nicht würde) würd ich persönlich das anders nennen. (Ein OverlayItem ist zum Beispiel ein bestimmter Marker für einen bestimmten Bankomat. Das Overlay enthält dann alle Marker für alle Bankomaten.)

    Code:
    BankomatMarkers itemizedoverlay = new BankomatMarkers(drawable);
    Das ist kein ItemizedOverlay, das ist eine Activity, und die sollte auf die Art gar nicht erzeugt werden. Das ist auch der Grund, warum du keine OverlayItems hinzufügen kannst - einfach weil es kein ItemizedOverlay ist.

    Als erstes solltest du das addOverlay wegschmeißen, dass dir Eclipse in die Klasse BankomatMarkers generiert hat.
    Dann solltest du dir eine Instanz-Variable vom Typ ItemizedOverlay in deine Klasse machen, und da kannst du dann deine OverlayItem adden. Dieses ItemizedOverlay fügst du dann in die Liste mapView.getOverlays() ein.

    Edit: ItemizedOverlay ist abstrakt, musst du dann natürlich auch noch eine Subklasse implementieren. Sieh mal hier http://de.wikibooks.org/wiki/Googles_Android_-_Lehrbuch_zur_Programmierung:_MapActivity#Layout ab Punkt 3.
     

Diese Seite empfehlen