首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MapFragment.getMapAsync(此)- NullPointerException

MapFragment.getMapAsync(此)- NullPointerException
EN

Stack Overflow用户
提问于 2015-06-23 06:45:58
回答 11查看 75.9K关注 0票数 39

我使用的是谷歌地图服务的com.google.android.gms:play-services-maps:7.5.0版本。当我尝试调用下面的代码时,我得到了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

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    SupportMapFragment mapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this); //error

    return inflater.inflate(R.layout.fragment_example_map, container, false);
}

fragment_example_map.xml文件:

代码语言:javascript
复制
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="app.ExampleMap">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2015-06-23 06:52:53

您正在尝试在片段存在之前查找该片段。您指出包含该片段的布局是fragment_example_map.xml。但是,您正在尝试在膨胀布局文件之前找到地图片段。这是行不通的。

除此之外,您似乎正在尝试从另一个片段的onCreateView()方法中获取映射片段。我不知道您为什么要在这里嵌套片段,因为这似乎会使您的代码更复杂和更脆弱,而没有明显的好处。

票数 14
EN

Stack Overflow用户

发布于 2015-11-16 21:01:45

在片段中使用getChildFragmentManager()代替getActivity().getSupportFragmentManager()

像这样:

代码语言:javascript
复制
SupportMapFragment mapFragment = (SupportMapFragment)getChildFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this); 
票数 20
EN

Stack Overflow用户

发布于 2017-03-21 17:09:29

如果您在片段中使用android:name="com.google.android.gms.maps.MapFragment",则使用以下命令更改代码:

代码语言:javascript
复制
MapFragment mapFragment1 = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
        mapFragment1.getMapAsync(this);

但是,如果您在片段中使用android:name="com.google.android.gms.maps.SupportMapFragment",则使用以下代码:

代码语言:javascript
复制
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30991087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档