web-dev-qa-db-fra.com

Null exception de pointeur à mapFragment.getMapAsync (this) lors de l'initialisation de google map

Lorsque j'utilise la version 6.5.87 des services Google Play, j'obtiens une exception de pointeur null lorsque j'appelle getMapAsync(). J'utilise une SupportMapFragment dans la présentation XML de ma Fragment.

Mon code:

SupportMapFragment mapFragment = (SupportMapFragment) getActivity()
        .getSupportFragmentManager().findFragmentById(R.id.mapFragment);

mapFragment.getMapAsync(this);

Remarque: Il n'y a aucun problème lorsque vous appelez getMap() sur des versions antérieures des services Google Play, mais getMap() est désormais obsolète ( docs ).

Voici la trace de la pile pour le NPE:

Java.lang.NullPointerException
            at com.decos.fixi.fragments.FragmentLocationMap.initializeMap(FragmentLocationMap.Java:132)
            at com.decos.fixi.fragments.FragmentLocationMap.onCreateView(FragmentLocationMap.Java:95)
            at Android.support.v4.app.Fragment.performCreateView(Fragment.Java:1786)
            at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:947)
            at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1126)
            at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:739)
            at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1489)
            at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:454)
            at Android.os.Handler.handleCallback(Handler.Java:615)
            at Android.os.Handler.dispatchMessage(Handler.Java:92)
            at Android.os.Looper.loop(Looper.Java:137)
            at Android.app.ActivityThread.main(ActivityThread.Java:4921)
            at Java.lang.reflect.Method.invokeNative(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:511)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1027)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:794)
            at dalvik.system.NativeStart.main(Native Method)
10
ravidl

Enfin j'ai eu la réponse!

SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
                .findFragmentById(R.id.mapFragment);

au lieu de

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

getChildFragmentManager () a fait l'affaire.

32
ravidl

En outre, si vous utilisez SupportMapFragment mapFragment = (SupportMapFragment).....

Assurez-vous ensuite que vous avez défini cet attribut class dans XML

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

Ne pas

class ="com.google.Android.gms.maps.MapFragment"
3
Shree Krishna

Dans AppCompatActivity, étendre

FragmentManager mFragmentManager = getSupportFragmentManager();
SupportMapFragment mVTMapFragment =(SupportMapFragment)mFragmentManager.findFragmentById(R.id.mapRideview);
mVTMapFragment.getMapAsync(this);

et implémenter la méthode de rappel onMapReady

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    setUpMap();
}
1
Krishna

Avez-vous implémenté la fonction de rappel pour votre getMapAsync()?

Sinon, vous devez implémenter la méthode onMapReady () dans votre code, puis vous pouvez ajouter des marqueurs ou déplacer des éléments de caméra dans votre méthode onMapReady().

Vous pouvez voir cet exemple à propos de onMapReady().

0
ztan

Titre

lancez votre programme en ajoutant ceci

 SupportMapFragment supportMapFragment

AJOUTEZ CE dans SUR CREATE METHOD ()

supportMapFragment = SupportMapFragment.newInstance(); 

FragmentManager fm = getFragmentManager();
fm.beginTransaction().replace(R.id.maplayout, new MapFragmentClass()).commit();
supportMapFragment.getMapAsync(this);

Android.support.v4.app.FragmentManager sfm = getSupportFragmentManager();
sfm.beginTransaction().add(R.id.map,supportMapFragment).commit();

cela fonctionnera le vérifier

0
Bhupendra Singh