当前位置: 首页 > 知识库问答 >
问题:

在片段内调用的Google map返回null

弘柏
2023-03-14

我正在尝试将Map放入一个片段中。我正在粘贴我正在使用的代码

XML

           <fragment
            android:id="@+id/contactFrag_F_map"
            android:name="com.google.android.gms.maps.MapFragment"
            android:layout_width="match_parent"
            android:layout_height="200dp"/>

下面是我声明的片段名称

public class ContactFragment extends MapFragment 

下面是我如何初始化地图

private void initilizeMap() {
    if (googleMap == null) {

        if (googleMap == null) {
            googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(
                    R.id.contactFrag_F_map)).getMap();
        }
        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getActivity(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

这个方法是在onCreateView上调用的

错误是

Caused by: 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

请帮助解决此问题。问题在下面部分

if (googleMap == null) {
                googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(
                        R.id.contactFrag_F_map)).getMap();
            }

编辑1

将xml更改为

<fragment
                android:id="@+id/contactFrag_F_map" 
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="200dp"/>

public class ContactFragment extends SupportMapFragment

和初始化

if (googleMap == null) {
                googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(
                        R.id.contactFrag_F_map)).getMap();
            }

但同样的错误是

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.SupportMapFragment.getMap()' on a null object reference

这发生在排队的时候

if (googleMap == null) {
                    googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(
                            R.id.contactFrag_F_map)).getMap();
                }

为什么会发生这种情况??

编辑2

对getmap已弃用。所以我试过了

MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.contactFrag_F_map);
        mapFragment.getMapAsync(this);

public class ContactFragment extends MapFragment implements OnMapReadyCallback { 

以及回调。。

@Override
    public void onMapReady(GoogleMap googleMap) {

        theGoogleMap = googleMap;

        setUpMap();
    }

和setUpMap方法

public void setUpMap(){

        theGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        theGoogleMap.setMyLocationEnabled(true);
        theGoogleMap.setTrafficEnabled(true);
        theGoogleMap.setIndoorEnabled(true);
        theGoogleMap.setBuildingsEnabled(true);
        theGoogleMap.getUiSettings().setZoomControlsEnabled(true);
    }

错误显示在onresume()中

java.lang.RuntimeException: Unable to resume activity {com.purpletab.daga/com.purpletab.daga.activities.CoreActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference

而且

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference

共有3个答案

拓拔浩阔
2023-03-14

尝试使用以下代码:

private void initilizeMap() {

    FragmentManager fm = getSupportFragmentManager();
    SupportMapFragment fragment = (SupportMapFragment) fm.findFragmentById(R.id.contactFrag_F_map);
    if (fragment == null) {
        fragment = SupportMapFragment.newInstance();
    }
    mapView = fragment.getMap();
}

在Xml文件中:

       <fragment
            android:id="@+id/contactFrag_F_map" 
            class="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="200dp"
             />
尤飞尘
2023-03-14

不要

 
  googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(
                    R.id.contactFrag_F_map)).getMap();

 

 
  googleMap = ((MapFragment) getActivity().getSupportFragmentmanager().findFragmentById(
                    R.id.contactFrag_F_map)).getMap();

 

getSupportFragmentManager

返回FragmentManager,以便与与此活动关联的片段进行交互。

封景曜
2023-03-14

解决方案。我在一个片段中放置了一个地图片段。

所以......

要放置在片段中的xml是

 <fragment
                android:id="@+id/contactFrag_F_map"
                android:name="com.google.android.gms.maps.MapFragment"
                android:layout_width="match_parent"
                android:layout_height="200dp"/>

public class ContactFragment extends Fragment implements OnMapReadyCallback {

在onCreateView()中使用

MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.contactFrag_F_map);
        mapFragment.getMapAsync(this);

在OnMapReadyCallback上

@Override
    public void onMapReady(GoogleMap googleMap) {

        theGoogleMap = googleMap;

        setUpMap();
    }

下面是setUpMap。

public void setUpMap(){

        theGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        theGoogleMap.setMyLocationEnabled(true);
        theGoogleMap.setTrafficEnabled(true);
        theGoogleMap.setIndoorEnabled(true);
        theGoogleMap.setBuildingsEnabled(true);
        theGoogleMap.getUiSettings().setZoomControlsEnabled(true);
    }

工作正常……)

 类似资料:
  • 我正在调用tabhost片段活动中的映射片段

  • 正如您在onCreate方法中看到的,我在“片段”列表的第0个片段上调用了getView。它返回null。我试着在代码中加入一个计时器,让它每秒运行一次,并检查视图是否为空。在计时器的第二个滴答声中,视图不为空。大体上 主要活动。JAVA 空白碎片。JAVA

  • 我想创建带有PagerView的片段,但运行以下代码会返回一个IllegalStateException: 源代码: IllegalStateException: 进程:com.company.user.blabla,pid:22256 java.lang.illegalstate异常:带有适配器的ViewPager com.company.user.blabla.fragments.homeFr

  • 在我片段中,我从图库中选择了照片 在manifest.xml中 在此之前,我的应用程序显示权限对话框。我按允许 此处请求权限对话框:

  • P.P.S@Philipp Jahoda,我实现了onCreateOptionsMenu(...)在片段的托管活动中。

  • 我在使用FragmentPagerAdapter时遇到问题。我想从视图寻呼机中的片段中检索数据。当我调用getItem()方法时,它返回一个片段,但不创建片段。所有片段变量均为null。我需要做什么来实例化片段?这是我的适配器。 这是viewpager中的片段。 我不太了解ViewPager是如何工作的,但据我所知,片段在没有设置任何变量的情况下返回的原因是因为ViewPager没有附加片段。如何