Google Maps CameraUpdateFactory no se ha inicializado
Estoy recibiendo algunos informes de la experiencia del usuario a través de crashlytics me da un error
Fatal Exception java.lang.NullPointerException CameraUpdateFactory is not initialized
Esto no es un accidente regular, ya que en él no ocurre para todos los usuarios, pero se está volviendo demasiado regular y tengo que resolverlo.
- Obtener la ubicación seleccionada de la actividad de Google Maps
- Para mostrar el mapa de Google en el emulador
- Obtener límites de mapa con Android Google Maps
- Android 2.3 Google Maps Falta el recurso maps_watermark_dark.png
- Abrir Google Maps desde hipervínculo
Había leído que esto podría suceder si los mapas no se habían inicializado que creo que he cubierto
if(googleMap!=null){ googleMap.animateCamera(CameraUpdateFactory.newLatLng(selectedLatLng)); }
También una posible causa podría ser que los servicios de Google Play no está en el dispositivo o está fuera de fecha y he añadido una cierta verificación para que también.
public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(FuelsFragment.this.getActivity()); // Showing status //CAMERAUPDATE FACTORY CRASH CAN BE A RESULT OF GOOGLE PLAY SERVICES NOT INSTALLED OR OUT OF DATE //ADDITIONAL VERIFICATION ADDED TO PREVENT FURTHER CRASHES //https://github.com/imhotep/MapKit/pull/17 if(status == ConnectionResult.SUCCESS) { mMapFragment = ReepMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.mapContainer, mMapFragment); fragmentTransaction.commit(); } else if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){ reep.toastNotify("You need to update Google Play Services in order to view maps"); } else if (status==ConnectionResult.SERVICE_MISSING){ reep.toastNotify("Google Play service is not enabled on this device."); }
Después de eso no estoy seguro de qué hacer a continuación, ya que esto no sucede para cada usuario.
Si alguien tiene alguna idea sobre por qué esto ocurre, agradecería su opinión
- Animación de marcadores en Google Maps V2
- Android: Buscar lugares cercanos con la API de Google Places
- Crashing de la API de Google Maps (mediante el emulador de Android)
- Cómo ocultar los botones "Navegación" y "Puntero GPS" cuando hago clic en el marcador en el mapa google de Android
- Obtenga la dirección de inicio / oficina de google maps
- Cómo obtener límite de velocidad mediante google maps api?
- Extraño error "java.io.IOException: EOF" en Android
- Cierre de una actividad de otra clase
Yo estaba recibiendo el mismo error, a pesar de que obtuve un objeto GoogleMap no nulo de un MapView. Lo resolví con una llamada explícita a MapsInitializer, aunque la documentación dice que no es necesario.
El Fragmento de mi aplicación configura el MapView mediante lo siguiente:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.map_panel, container, false); mapView = (MapView) view.findViewById(R.id.map_view); mapView.onCreate(savedInstanceState); configureMap(mapView.getMap()); return view; } private void configureMap(GoogleMap map, double lat, double lon) { if (map == null) return; // Google Maps not available try { MapsInitializer.initialize(getActivity()); } catch (GooglePlayServicesNotAvailableException e) { Log.e(LOG_TAG, "Have GoogleMap but then error", e); return; } map.setMyLocationEnabled(true); LatLng latLng = new LatLng(lat, lon); CameraUpdate camera = CameraUpdateFactory.newLatLng(latLng); map.animateCamera(camera); }
Antes de agregar la llamada a MapsInitializer, obtendría una excepción de CameraUpdateFactory. Después de agregar la llamada, CameraUpdateFactory siempre tiene éxito.
Solo usa MapsInitializer.initialize sin try-catch, porque no arroja GooglePlayServicesNotAvailableException en la última versión de los servicios de Google Play, que se verificó con la versión de paquete 5084032.
Puede ser que usted debe hacer un Class.forName()
? Para CameraUpdateFactory
? En try - catch
Algo de mi MapUtil
, que maneja este caso:
public static void animateCamera(final MapView mapView, final GoogleMap map, final LatLng location) { try{ CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(location, getBetterZoom(map)); map.animateCamera(cameraUpdate); }catch(Exception e) { MapsInitializer.initialize(mapView.getContext()); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") @Override public void onGlobalLayout() { GlobalyLayoutListenerUtil.removeGlobalLayoutListener(mapView, this); animateCamera(mapView, mapView.getMap(), location); } }); } else { if(map != null){ map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { if(location != null){ animateCamera(mapView, mapView.getMap(), location); } } }); } } } }
En algún momento puede ser causada por la versión antigua del servicio de Google Play. Actualice el servicio de Google Play.
- Vista web de Android: evita que los gestos táctiles se pasen a la vista principal de los padres
- ListView o TableLayout?