web-dev-qa-db-fra.com

Android ne peut pas trouver la méthode de symbole getMap ()

J'ai une application gps qui fonctionne bien sur mon téléphone. Cependant, je vois qu'il y avait des gens ayant une exception de pointeur nul dans la production.

    SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

    // Getting GoogleMap object from the fragment
    googleMap = fm.getMap();

    // Enabling MyLocation Layer of Google Map
    googleMap.setMyLocationEnabled(true);

    googleMap.setPadding(0, 0, 0, 90);

L'erreur que je reçois de la production est causée par:

Java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.Android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference

J'ai donc fait quelques recherches et découvert que la méthode getMap a été supprimée et les gens recommandent d'utiliser getMapAsync(this);

@Override
public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;    //which doesn't seem to work
}

Cependant, je fais référence à la variable googleMap dans de nombreuses méthodes différentes, et je ne peux pas déplacer tout le code vers la méthode onMapReady. J'ai essayé d'utiliser this.googleMap = googleMap Dans la méthode onMapReady, mais j'obtiens toujours des exceptions de pointeur nul chaque fois que j'essaie de référencer la variable googleMap. J'ai défini getMapAsync (this) dans onCreated (), puis j'essaie d'accéder à l'objet 'googleMap' dans onResume () et d'obtenir l'exception de pointeur nul. Y'a t'il un moyen d'arranger cela? Je vous remercie.

8
Julia

Vous obtenez une exception de pointeur nul parce que vous essayez d'utiliser un objet google map mais que l'objet google map est toujours nul, vous devez donc suivre cette étape. écrire ce code dans la méthode onCreate ()

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

impleents maintenant votre classe avec public class Demo implements OnMapReadyCallback en bref, vous devez remplacer la métropole onMapReady (Googlemap googleMap). vous pouvez effectuer toutes les actions après rappel depuis onMapReady ().

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 // Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
    }
7
Kintan Patel

Comme je le suggère dans this Answer.

getMap() est déconseillé, utilisez getMapAsync() au lieu de cela de la manière suivante.

Remplacez ceci

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();

avec ça

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

pour plus de détails, visitez ce lien

4
Ironman

Vous pouvez utiliser la méthode getMapAsync(this). Veuillez vérifier ce lien pour en savoir plus

2

Remplacer

googleMap = ((SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.googleMap)).getMap();

avec

googleMap = ((SupportMapFragment) getChildFragmentManager()
    .findFragmentById(R.id.map)).getMapAsync((OnMapReadyCallback);this);
1
Prathap Reddy

Certes, vous n'avez pas fait correspondre les moyens SupportMapFragment et MapFragment si vous avez un attribut de classe

class ="com.google.Android.gms.maps.MapFragment"

dans votre XML, vous devez utiliser

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

OU

Si vous avez des cours comme

class="com.google.Android.gms.maps.SupportMapFragment"

alors vous pouvez faire comme vous le faites.

0
Shree Krishna