En google maps V2 … fragment.getMap () devuelve null
¡No puedo conseguir el mapa! Todo lo que puedo obtener es nulo.
Aquí está el código.
- Google Maps API Android
- Cómo mostrar los marcadores todo el tiempo por AsyncTask o Handler en google map versión 2
- El marcador del mapa de Google se reemplaza por el rectángulo delimitador en el zoom
- Google Maps V2 no funciona en la producción con la clave correcta
- Google Place API para espacios de estacionamiento
public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SupportMapFragment fragment = new SupportMapFragment(); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit(); GoogleMap map; map = fragment.getMap(); //here i cant access this snippet because map = null if(map!=null){ UiSettings mm = map.getUiSettings(); map.setMyLocationEnabled(true); } } }
El manifiesto:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.anywhere_reminder" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <permission android:name="com.example.anywhere_reminder.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.anywhere_reminder.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.google.android.gms.BuildConfig" /> <activity android:name="com.example.anywhere_reminder.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value=" my key "/> </application> </manifest>
Aquí está el xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> </RelativeLayout>
Traté de resolverlo como esta solución Google Maps Android API v2 lanza GooglePlayServicesNotAvailableException, fuera de fecha, SupportMapFragment.getMap () devuelve null .. pero aún no funcionó
ACTUALIZAR:
Tengo mi mapa trabajando ahora .. aquí está la versión de trabajo editada
public class MainActivity extends FragmentActivity { private GoogleMap myMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); android.support.v4.app.FragmentManager myFragmentManager = getSupportFragmentManager(); SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map); myMap = mySupportMapFragment.getMap(); if(myMap!=null) myMap.setMyLocationEnabled(true); }
- Android Google Maps V2 cambiar Mi ubicación Icono
- Cómo obtener límite de velocidad mediante google maps api?
- Multiple MapActivitys en la pila
- MapView onCreate lanza NullPointerException en dispositivos LG
- Google Maps CameraUpdateFactory no se ha inicializado
- Cómo dibujar una forma en el fragmento de mapa al tocarlo con google map V2
- ¿Cómo mostrar pop-up al hacer clic en la superposición de mapa?
- Obtener la ubicación seleccionada de la actividad de Google Maps
Estás creando un fragmento dinámico, a través de un FragmentTransaction
. Cuando llama a commit()
, el fragmento aún no se ha agregado a la pantalla, porque la FragmentTransaction
sólo se ha programado para ocurrir – no se ha producido todavía. Por lo tanto, el SupportMapFragment
no se ha llamado con onCreateView()
todavía, así que no hay GoogleMap
.
Cambia a fragmentos estáticos (etiqueta <fragment>
en un diseño) o retrasa el uso de GoogleMap
hasta que se procese la transacción.
ExecutePendingTransactions () en la clase FragmentManager fue diseñado para solucionar este retraso. From documantstion: Después de que se compromete un FragmentTransaction con FragmentTransaction.commit (), está programado para ejecutarse asincrónicamente en el subproceso principal del proceso. Si desea ejecutar inmediatamente cualquier operación pendiente , puede llamar a esta función (sólo desde el hilo principal) para hacerlo. Tenga en cuenta que todas las devoluciones de llamada y otros comportamientos relacionados se realizarán desde esta llamada, así que tenga cuidado acerca de dónde se llama.
He extendido la clase MapFragment y agregado un oyente. El doc de getMap () dice:
… Nulo si la vista del fragmento aún no está lista. Esto puede suceder si el ciclo de vida del fragmento no ha pasado a través de onCreateView (LayoutInflater, ViewGroup, Bundle) aún ….
Entonces llamo al oyente después de onCreateView. Agrego la clase
public class MySupportMapFragment extends SupportMapFragment{ private MySupportMapFragmentListener listener; public interface MySupportMapFragmentListener{ public void onMapCreated(GoogleMap googleMap); } // value taken from source code private static final String MAP_OPTIONS = "MapOptions"; public static MySupportMapFragment newInstance() { MySupportMapFragment f = new MySupportMapFragment(); return f; } public static MySupportMapFragment newInstance(GoogleMapOptions options) { MySupportMapFragment f = new MySupportMapFragment(); Bundle args = new Bundle(); args.putParcelable(MAP_OPTIONS, options); f.setArguments(args); return f; } // other newInstance methods ... /* (non-Javadoc) * @see android.support.v4.app.Fragment#onViewCreated(android.view.View, android.os.Bundle) */ @Override public void onViewCreated(View view, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onViewCreated(view, savedInstanceState); // here, as doc say, the map can be initialized, or the service is not available if(listener!=null){ listener.onMapCreated(getMap()); } } /** * @return the listener */ public MySupportMapFragmentListener getListener() { return listener; } /** * @param listener the listener to set */ public void setListener(MySupportMapFragmentListener listener) { this.listener = listener; }
}
Después de la actividad o fragmento de llamada …
mapFragment = MySupportMapFragment.newInstance(); mapFragment.setListener(new MySupportMapFragmentListener() { @Override public void onMapCreated(GoogleMap googleMap) { // TODO Auto-generated method stub if(googleMap!=null){ // service is unaviable } }
Mover el fragmento de código:
GoogleMap mapa; Map = fragment.getMap ();
// aquí el mapa no es nulo
If (map! = Null) {
UiSettings mm = map.getUiSettings(); map.setMyLocationEnabled(true);
}
Al método onResume (), esto resolverá su problema.
Otra forma de resolverlo. Implementar una interfaz en el MapFragment para comunicarse con la actividad cuando esté lista para la creación de GoogleMap.
@Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); listener.onGoogleMapCreattion(); }
A continuación, sólo tiene que implementar el oyente en la activtiy:
@Override public void onGoogleMapCreation() { setUpMapIfNeeded(); } private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { mMap = mMapFragment.getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { // The Map is verified. It is now safe to manipulate the map. setUpMap(); } } }
- BottomNavigationView no es de ancho completo
- Eclipse Java – nombre de paquete no válido – Palabras reservadas en el nombre del paquete