29

Sto provando a visualizzare una mappa semplice utilizzando Google map API v2 in un'applicazione Android. Sto seguendo le istruzioni Map API Documentation. Ma penso che lo onMapReady non stia chiamando per qualche motivo. Sto usando la versione google-play-services_lib6587000. Il mio telefono ha google-play-services_lib verion 6587038, credo.onMapReady non chiama nonostante la visualizzazione della mappa senza errori

Google map funziona con i controlli iniziali. Qualcuno può aiutarmi a correggere questo errore?

public class MapDisplay extends FragmentActivity 
implements OnMapReadyCallback { 

private GoogleMap mMap; 
private Location mCurrentLocation; 
private MarkerOptions mMarkerOptions ; 
    private MapFragment mMapFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.location_map); 

    /** not needed 
      mMapFragment = MapFragment.newInstance(); 
      FragmentTransaction fragmentTransaction = 
        getFragmentManag 

er().beginTransaction(); 
      fragmentTransaction.add(R.id.map, mMapFragment); 
      fragmentTransaction.commit();*/ 

    /**corrected code*/ 
      MapFragment mapFragment = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
       mapFragment.getMapAsync(this); 

} 


@Override 
public void onMapReady(GoogleMap map) { 

    toast("Map ready"); 
    Log.d("--***** MAP ","::Map ready"); 

    LatLng sydney = new LatLng(-33.867, 151.206); 

    map.setMyLocationEnabled(true); 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13)); 

    map.addMarker(new MarkerOptions() 
      .title("Sydney") 
      .snippet("The most populous city in Australia.") 
      .position(sydney)); 


    } 

private void toast(String text){ 
     Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 

    } 

file di location_map.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="com.google.android.gms.maps.MapFragment" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

risposta

61

per quanto ne so, onMapReady() viene attivato da una chiamata al getMapAsync() sul MapFragment, e non vedo dove si sta chiamando questo.

+1

Aggiunto getMapAsync(). ora onMapReady sta funzionando. – SAN

+1

@ SAN: "getMapAsync() throw and error" - quindi forse dovresti considerare di chiedere una domanda di overflow dello stack per ottenere assistenza con qualsiasi problema tu abbia lì. "così ho dovuto usare" - quindi? AFAIK, devi comunque chiamare 'getMapAsync()'. Inoltre, ora hai * due * istanze di MapFragment'. Ecco un esempio di progetto che dimostra l'uso di 'getMapAsync()' con un 'MapFragment' statico: https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/NooYawk – CommonsWare

+1

Sarà utile per alcuni altrimenti se in xml il tuo Nepster

10

Per chiamare OnMapReady(GoogleMap map), aggiungere quanto segue al metodo di onCreate(...):

MapFragment mapFragment = (MapFragment) 
    getFragmentManager().findFragmentById(R.id.map); 

quindi, aggiungere:

// This calls OnMapReady(..). (Asynchronously) 
mapFragment.getMapAsync(MapDisplay.this); 
+0

Nota MapDisplay.questo nel suo argomento, nel caso tu abbia più classi come me. È più sicuro nominare la classe. – FlorianB