No se puede resolver el método getMap ()

Estoy tratando de obtener un fragmento de mapa trabajando dentro de mi aplicación y sigo recibiendo un error al intentar obtener mi objeto de GoogleMap.

FragmentWithMap.java

import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; public class FragmentWithMap extends android.support.v4.app.Fragment { private OnFragmentInteractionListener mListener; private static final double LAT = 32.084; private static final double LON = 34.8878; Place place; private GoogleMap mMap; private View view; private Marker marker; int userIcon = FragmentWithDetails.userIcon; public static FragmentWithMap newInstance(Place place) { Bundle args = new Bundle(); if (place != null) { args.putInt("id", place.getId()); args.putString("name", place.getName()); args.putString("address", place.getAddress()); args.putFloat("lat", place.getLat()); args.putFloat("lng", place.getLng()); } FragmentWithMap fragment = new FragmentWithMap(); fragment.setArguments(args); return fragment; } public FragmentWithMap() { //empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null && getArguments().getString("name") != null) { place = new Place(getArguments().getInt("id"), getArguments().getString("name"), getArguments().getString("address"), getArguments().getFloat("lat"), getArguments().getFloat("lng")); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view == null) { view = inflater.inflate(R.layout.fragment_fragment_with_map, container, false); } setUpMapIfNeeded(); return view; } @Override public void onDestroyView() { super.onDestroyView(); android.support.v4.app.Fragment f = getFragmentManager() .findFragmentById(R.id.fragmnet_container_map); if (f != null) { try { getFragmentManager().beginTransaction().remove(f).commit(); } catch (IllegalStateException ise) { Log.d("FragmentWithMap", "Already closed"); } } ViewGroup parentViewGroup = (ViewGroup) view.getParent(); if (parentViewGroup != null) { parentViewGroup.removeAllViews(); } } public void onButtonPressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnFragmentInteractionListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } public void showPlace(Place place) { setPlace(place); setUpMap(); } public void setPlace(Place place) { this.place = place; } public interface OnFragmentInteractionListener { public void onFragmentInteraction(Uri uri); } private void setUpMapIfNeeded() { // Do a null check if (mMap == null) { // Try to obtain the map from the SupportMapFragment. Fragment mmm = getChildFragmentManager().findFragmentById(R.id.fragment_map2); mMap = ((SupportMapFragment) mmm).getMap(); // Check if we were successful if (mMap != null) { setUpMap(); } } } private void setUpMap() { double lat = LAT; double lng = LON; String name = "You are here"; if (place != null) { lat = place.getLat(); lng = place.getLng(); name = place.getName(); } if (marker != null) { marker.remove(); } LatLng position = new LatLng(lat, lng); MarkerOptions markerOptions = new MarkerOptions(). position(position). title(name). icon(BitmapDescriptorFactory.fromResource(userIcon)). snippet("Your last recorded location"); marker = mMap.addMarker(markerOptions); if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } mMap.setMyLocationEnabled(true); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, 15); mMap.animateCamera(cameraUpdate); } } 

Y aquí está el XML

Fragment_with_map.xml

 <fragment 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" android:id="@+id/fragment_map2" tools:context="com.example.eldad.myplacesapp.FragmentWithMap" android:name="com.google.android.gms.maps.SupportMapFragment" /> 

He copiado el código de una aplicación diferente, donde el método getMap () es simplemente obsoleto, así que dudo que el problema está en el propio código. No tengo ninguna edición con él siendo deprecated, y prefiero no utilizar el getMapAsync () si no tengo que. Pero aquí por alguna razón recibo el error

"No se puede resolver el método 'getMap ()'"

. También recibo un error

"Error: Error de ejecución para la tarea ': app: compileDebugJavaWithJavac'.

Error en la compilación; Vea la salida de error del compilador para más detalles. "

Aunque no puedo estar seguro si está conectado a este problema.

El método getMap() estaba obsoleto y ahora se ha eliminado. Si miras la documentación de SupportMapFragment , no está allí.

También puede ver en las notas de la versión :

La función getMap () previamente desaprobada ya no está disponible en el SDK de servicios de Google Play. La función getMap () está obsoleta desde diciembre de 2014. Consulte la publicación en el blog de lanzamiento para obtener ayuda con la conversión de getMap () a getMapAsync ().

Y desde la entrada del blog:

En diciembre de 2014 desaprobamos getMap () a favor de getMapAsync (). A partir de esta versión, necesitará utilizar getMapAsync () para compilar sus aplicaciones.

Por lo tanto, sólo use getMapAsync (), es simple.

Primero haga que su Fragmento implemente la interfaz OnMapReadyCallback:

 public class FragmentWithMap extends android.support.v4.app.Fragment implements OnMapReadyCallback { 

A continuación, modifique su código setUpMapIfNeeded () y agregue la devolución de llamada onMapReady ():

 private void setUpMapIfNeeded() { if (mMap == null) { SupportMapFragment mapFrag = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.fragment_map2); mapFrag.getMapAsync(this); } } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; setUpMap(); } 

Utilizar esta

 compile 'com.google.android.gms:play-services-location:8.4.0' map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById( R.id.map)).getMap(); 
  • Almacenamiento en caché de Google Maps para uso sin conexión (api v2)
  • ¿Dónde encuentro el texto de atribución de Google Play Services?
  • ¿Qué es el nivel de zoom 15 equivalente a?
  • Pantalla gris de la API de Google Maps v2
  • Google Maps Android API v2 en China - la carga del mapa tomó alrededor de una hora
  • MapFragment devuelve null
  • Google Maps Android Clustering OnCameraChangeListener () despreciado
  • cómo borrar todas las superposiciones de mapa o marcadores de google map en android?
  • Google Maps v2 Error de autorización. Diferentes SHA1
  • Utilidad de mapas de Android: imágenes de la URL
  • El método de instantánea de GoogleMap devuelve una imagen blanca
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.