Android 4.xバージョンで問題なくGoogle Maps API v2を長い間使用しています。今、Nexusデバイス(5および7)に最新のLollipopビルドをインストールして具体化しようとしましたアプリ。
KitKiatではすべてが問題なく、私が説明している問題はLollipopでのみ表示されることを指摘しておきます。
私のXMLソースコードでは、MapFragment(Google Play Servicesライブラリバージョン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がスローされます。デバッガーアプリではフラグメントを見つけることができますが、GoogleMapを返すことはできません。私もMapViewを使用しようとしました。また、nullをスローします。私にとって最も奇妙なことは、アプリ自体には問題なくマップが読み込まれることですが、コードではそれを処理するために到達できません。
私はまったく同じ問題を抱えていましたが、これが私にとってうまくいきました:
これを交換...
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を与える理由を確認してください