Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Google Maps getMapAsync()提供空指针(尝试其他建议)_Java_Android_Google Maps_Android Fragments_Nullpointerexception - Fatal编程技术网

Java Android Google Maps getMapAsync()提供空指针(尝试其他建议)

Java Android Google Maps getMapAsync()提供空指针(尝试其他建议),java,android,google-maps,android-fragments,nullpointerexception,Java,Android,Google Maps,Android Fragments,Nullpointerexception,我想在片段上实现一个映射。但是当我调用getMapAsync()时,它会给出一个NullpointerException: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null

我想在片段上实现一个映射。但是当我调用getMapAsync()时,它会给出一个NullpointerException:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
                                                                            at kontrolleur.radar.de.radar.fragment.MapFragment.inOnCreateView(MapFragment.java:33)
MapFragment.class:

public class MapFragment extends BaseFragment implements OnMapReadyCallback {

public static MapFragment create(){
    return new MapFragment();
}

@Override
public int getLayoutResId() {
    return R.layout.fragment_map;
}

@Override
public void inOnCreateView(View root, @Nullable ViewGroup container, Bundle savedInstanceState) {
    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_container);
    mapFragment.getMapAsync(this);
}

private GoogleMap googleMap;

@Override
public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;
}
}
该片段位于ViewPager内

以下是片段_map.xml:

<?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">

<com.google.android.gms.maps.MapView
    android:id="@+id/map_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kontrolleur.radar.de.radar">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />
    <meta-data android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <activity android:name=".MainActivity"
        android:theme="@style/FullScreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

api密钥位于google_maps_api.xml中,并且是有效的

我尝试的是:

首先,我用SupportMapFragment的新实例替换了mapFragment。但这并没有起作用,在碎片上放了一个空白屏幕

然后,我尝试将mapFragment.getMapAsync(这个);进入不同的方法(如onCreate、onViewCreated等)。仍然是nullpointerexception

我还将getChildFragmentManager()替换为getActivity().getFragmentManager()

我错过什么了吗


My MainActivity扩展AppCompatActivity,BaseFragment扩展Fragment(如果有帮助)。

问题在于
片段
的布局XML定义的是
映射视图
,而不是
支持映射片段
。因此,对
findFragmentById()
的调用将返回
null

替换此标签:

<com.google.android.gms.maps.MapView
    android:id="@+id/map_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

为此:

<fragment
    android:id="@+id/map_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    />


我知道什么是NullpointerException。但我不明白为什么无法找到或加载SupportMapFragment以重新打开,因为这个问题不是关于对
NullPointerException
是什么的根本误解,而是关于在这种特殊情况下为什么某个变量为空的具体细节。@BenP。我刚刚将dupe目标更改为一个精确的副本。更好了,谢谢现在我得到了一个android.view.InflateException:Binary XML文件行#8:Binary XML文件行#8:Error Expiling class Fragments只是一个猜测,但我打赌这是因为在布局中为
片段使用了
标记,必须使用
getChildFragmentManager()
返回的
FragmentManager
添加子片段(不能通过XML直接添加)。