MapFragment或MapView getMap()在棒棒糖上返回null

我一直在Android 4.x版本上使用Google Maps API v2很长时间,没有任何问题。 现在,我安装了最新的棒棒糖build立在我的Nexus设备(5和7),试图实现应用程序。

我想指出,KitKiat上的一切都是正确的,我所描述的问题只是在棒棒糖上popup。

在我的XML源代码中,我使用了MapFragment(Google Play服务库版本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"/> 

在Java代码中,我重写了OnPause()方法以达到映射:

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

在这一行它抛出NullPointerException。 在debugging器中,应用程序能够find片段,但是无法返回GoogleMap。 我也试图使用MapView。 它也抛出null。 对我来说最奇怪的是,地图加载没有在应用程序本身的问题,但在代码我不能达到它的工作。

Solutions Collecting From Web of "MapFragment或MapView getMap()在棒棒糖上返回null"

我有完全相同的问题,但是这对我来说是有效的:

replace这个…

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

有了这个…

GoogleMap map = getMapFragment().getMap();

然后把这个坏男孩扔进去,给它一个旋转。

 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); } 

Google现在使用以下方法提供了一种更方便的方式来获取地图

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

看起来这可能是21的targetSdkVersion的问题: https : //code.google.com/p/android-developer-preview/issues/detail? id = 1947

但是,切换到getChildFragmentManager()为我工作:

supportMapFragment的findFragmentById在Android Studio中返回null

你有没有尝试过isGooglePlayServicesAvailable来检查为什么它返回null? null在getmap上有很多原因,试着用这个来检查为什么给null