2016-08-01 5 views
1

Ich hatte funktionierenden Code vor der Aktualisierung meiner SDK heute (für zukünftige Referenz auf das Fragedatum gefragt). .getMap verwendet, um Warnungen zu geben, dass es veraltet war, aber jetzt wird es nicht einmal als gültige Eingabe erkannt. Ich gehe davon aus, dass dies wegen der neuen Version von API 24 (Android Nougat) passiert ist. Ohne weitere Umschweife hier ist der Code:Wie kann ich mein Projekt mit getMapAsync kompatibel machen?

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = 
        (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      mMap = mapFrag.getMapAsync(); 
     } 
     return (mMap != null); 
    } 

Wenn jemand mir helfen könnte, Änderungen integrieren .getMapAsync() ich es wirklich schätzen würde.

Vielen Dank!

UPDATE: Hier ist der neue und aktualisierte Code nach in Antworten auf Anregungen suchen (dies ist nicht in der onCreate) -

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
      mapFrag.getMapAsync(this); 
     } 
      return (mMap != null); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     if (googleMap != null) { 
      mMap = googleMap; 
     } 
    } 
+0

Haben Sie etwas versucht? Kannst du auf die Dokumentation verweisen und es ausprobieren und sehen, was passiert? – nasch

+0

@nasch Ich habe versucht, '(GoogleMaps googlemaps)' in der leeren Klammer hinzuzufügen, aber es hat nicht funktioniert. – petnamedsteve

+0

Warum hast du das gemacht? Die Dokumentation besagt, dass ein OnMapReadyCallback und keine GoogleMap übergeben werden soll. – nasch

Antwort

1

Was Sie brauchen:

1. compile 'com.google.android.gms:play-services-maps:9.2.0' in Ihrer gradle Datei (Wenn Sie die Karte nicht verwenden können, müssen Sie möglicherweise die neuesten Tools herunterladen.

2. Die Aktivität, die das Kartenfragment lädt, muss OnMapReadyCallback implementieren. (Dies ist der einfachste Weg, Sie können eine andere Klasse erstellen, die OnMapReadyCallback implementiert).

3.In der Aktivität onCreate Methode, müssen Sie folgendes tun:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /// additiona code here 
    MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    mapFrag.getMapAsync(this); //this is instance of your activity. 
    //maybe code here 
} 

//callback method from OnMapReadyCallback 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    if (googleMap != null) { 
     mMap = googleMap; 
     //now the map is loaded, you can use it 
    } 
} 

EDIT NACH CODE EDIT ON SO POST

Ihr initMap falsch ist, ist es ein nicht zurückgeben kann boolean Wert, weil die getMapAsync ist wie der Name sagt, async, das bedeutet, dass die Methode ausgeführt wird und es wird sofort zurück, nicht auf die Fertigstellung warten, so dass die return (mMap != null); wird fast immer false zurückgeben. Sie sollten onMapReady verwenden, um zu überprüfen, ob die Karte geladen ist oder nicht.

+0

Danke für die Antwort! Bitte schauen Sie sich den aktualisierten Code an: D – petnamedsteve

+0

@petnamedsteve Bitte überprüfen Sie meine bearbeitete Antwort. – danypata

+0

Es tut mir leid, dass ich dich nicht bekommen habe. Ich muss das "if map null" -Stück in "onMapReady" setzen, wenn ich dich richtig verstanden habe. Wenn das der Fall ist, bitte speichere mir einen genauen Code, weil ich nicht verstehe, wie ich das mache. Vielen Dank! – petnamedsteve

1

Sie müssen wie dieses

mapFrag = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFrag.getMapAsync(this); 

anrufen und Ihre actifity machen (zum Beispiel) implementieren OnMapReadyCallback. Dann überschreiben Rückrufmethode OnMapReady (GoogleMap googleMap)

+0

sieht aus wie ich meine Antwort Moment letztere))) –

+0

Vielen Dank für die Beantwortung! Bitte sehen Sie sich den aktualisierten Code an: D – petnamedsteve