MapFragment or MapView getMap() returns null on Lollipop

20,425

Solution 1

I had exactly the same problem but this is what worked for me:

Replace this...

GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

with this...

GoogleMap map = getMapFragment().getMap();

then slip this bad boy in and give it a whirl...

private MapFragment getMapFragment() {
    FragmentManager fm = null;

    Log.d(TAG, "sdk: " + Build.VERSION.SDK_INT);
    Log.d(TAG, "release: " + Build.VERSION.RELEASE);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        Log.d(TAG, "using getFragmentManager");
        fm = getFragmentManager();
    } else {
        Log.d(TAG, "using getChildFragmentManager");
        fm = getChildFragmentManager();
    }

    return (MapFragment) fm.findFragmentById(R.id.map);
}

Solution 2

Google now made a more convenient way to get the map using the following method

    myMapFragment.getMapAsync(new OnMapReadyCallback) {
         @Override
         public void onMapReady(GoogleMap googleMap) {
             myMap = googleMap;
         }
    });

Solution 3

It looks like this might be an issue with a targetSdkVersion of 21: https://code.google.com/p/android-developer-preview/issues/detail?id=1947

However, switching to getChildFragmentManager() worked for me:

findFragmentById for SupportMapFragment returns null in Android Studio

Solution 4

Have you tried isGooglePlayServicesAvailable to check why its returning null? null has many reasons on getmap, try using this to check why its giving null

Share:
20,425
mroczis
Author by

mroczis

Updated on July 05, 2022

Comments

  • mroczis
    mroczis almost 2 years

    I've been using Google Maps API v2 for a long time on Android 4.x versions without a problem. Now I installed latest Lollipop build on my Nexus devices (5 and 7) trying to materialize the app.

    I'd like to point out that everything is ok on KitKiat and the problem I'm describing is poping up only on Lollipop.

    In my XML source code I'm using MapFragment (Google Play Services library version 6.1.11).

    <fragment android:id="@+id/map"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:name="com.google.android.gms.maps.MapFragment"/>
    

    In Java code I'm overriding OnPause() method to reach map:

    GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    

    At this line it throws NullPointerException. In debugger app is able to find fragment, however it's not able to return GoogleMap. I've also tried to use MapView. It also throws null. The weirdest thing for me is that map loads without a problem on app itself but in code I cant reach it to work with it.

  • mroczis
    mroczis over 9 years
    Yes, I did. Finally I solved my problem by reimplementing MapView. MapFragment does not seem to work at all.
  • itsmewajid
    itsmewajid over 9 years
    @mroczis Can u just describe me how did u fix it?
  • mroczis
    mroczis over 9 years
    I used MapView after all, set up it's lifecycle (calling mMapView.onCreate() on onCreate() method of activity, mMapView.onPause() on activity's onPause() etc.) and it did work. MapFragment does seem to not attach to FragmentManager on Lollipop.
  • Kartik Sharma
    Kartik Sharma over 9 years
    Thanks a lot. Finally this did the job for me.
  • Jay Sidri
    Jay Sidri over 9 years
    Is this a known issue on Lollipop?
  • edgarmiro
    edgarmiro over 9 years
    Perfect answer. Thanks!
  • BoD
    BoD about 9 years
    This was the correct answer in my case. The accepted answer seems to assume that the MapFragment is null, which is not the case according to the question (in the question the MapFragment is not null, but the returned value of getMap() is null).
  • Deep Singh
    Deep Singh almost 9 years
    @Rhisiart thanks for your answer .i want to know one more thing .after using this code ..how we will handle on backstack with this fragment in navigation drawer ...bcz after using this code onbackstack is not working with this fragment.
  • Rhisiart
    Rhisiart almost 9 years
    @DeepSingh without more detail, all I can tell you is that my fragment extends com.google.android.gms.maps.MapFragment and is hosted within an android.support.v13.app.FragmentTabHost along with 2 other android.widget.TabHost$TabSpec's in an android.app.Activity targeting android:targetSdkVersion="22. You can see it in action within this app (select either 'Find nature events' or 'Find events' from the navigation drawer) - play.google.com/store/apps/…
  • Shubham Chaudhary
    Shubham Chaudhary almost 9 years
    I wish I could +1 multiple times on this answer
  • Frildoren
    Frildoren over 8 years
    I'm trying to implement this solution but it says getChildFragmentManager is undefined. Im inside an Activity. Someone hlp me please?
  • Ramachandra Reddy Avula
    Ramachandra Reddy Avula almost 8 years
    Dude, you saved my time. Thanks alot