Map-Fragment(v2)Nullpointer(Lollipop下的问题?)

Mar*_*fer 3 android google-maps android-fragments android-5.0-lollipop

当我在Android Lollipop中启动它时,我在我的应用程序中发现了一个错误.Logcat说:

java.lang.NullPointerException: 

Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap.
com.google.android.gms.maps.MapFragment.getMap()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

该错误只在运行Android Lollipop所示,确切的 相同应用程序是没有问题的,在其他设备上运行*.


这是代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

    <LinearLayout
        android:id="@+id/map_side_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/BlueGreyL3"
        android:orientation="horizontal"
        android:weightSum="100">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/map_margin_left_24dp"
            android:layout_marginStart="@dimen/map_margin_left_24dp"
            android:layout_weight="8"
            android:orientation="vertical">

            <!-- MAP -->
            <fragment
                android:id="@+id/location_map"
                class="com.google.android.gms.maps.MapFragment"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>

        </LinearLayout>

    </LinearLayout>

    <!-- Ads -->
    <LinearLayout
        android:id="@+id/linlay_wrb"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

谷歌地图v2片段LocationFragments.java通过调用加载到我的班级

// View 
try {
    mView = inflater.inflate(R.layout.location_fragment, container, false);
    sMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.location_map)).getMap();
    mSideHolder = (LinearLayout) mView.findViewById(R.id.map_side_holder);
Run Code Online (Sandbox Code Playgroud)

我使用的是AndroidStudio,所以这里是build.gradle:

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"


    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
   }

[...]

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v13:21.0.0'
    compile 'com.android.support:support-v4:21.0.0'
    compile 'com.google.android.gms:play-services:5.0.89'
}
Run Code Online (Sandbox Code Playgroud)

和清单:

    <!-- Google Play -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

    <!-- Maps -->
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value=""/>
Run Code Online (Sandbox Code Playgroud)

我不知道,我做错了什么..这个问题可能是由Lollipop本身造成的吗?

提前致谢,

马丁


*测试设备:

  1. HTC One M8 - 4.4.4(GPE/API 19) - >有效
  2. 三星S4 Mini - 4.4.2(CM11/API 19) - >有效
  3. 三星S2 - 4.0.3(ICS/API 15) - >有效
  4. HTC One M8 - 5.0(LL/API 20) - >加载地图时出错
  5. Nexus 5 - 5.0(LL/API 20) - >加载地图时出错

Jac*_*edt 6

我在HTC M8 5.0下遇到了完全相同的问题,但只是移动代码而onResume没有做到这一点.相反,我发现如果我使用getChildFragment()而不是正常,它会起作用getFragmentManager().

我现在使用的代码来获取对地图对象的引用(下onResume):

MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.mapsfragment_map);

if(mapFragment == null){
    return;
}

map = mapFragment.getMap();
Run Code Online (Sandbox Code Playgroud)

我希望这可能会有所帮助!