当前位置:  开发笔记 > Android > 正文

MapFragment在getMapAsync(this)方法中导致NullPointerException

如何解决《MapFragment在getMapAsync(this)方法中导致NullPointerException》经验,为你挑选了1个好方法。

我已经实现了一个MapFragment在运行时添加的活动.该MapFragmentXML有静态的fragment,我试图让添加在运行时.我还发现Lollipop在运行时添加了地图片段存在一些问题.请检查问题和临时解决方案

我也在下面给出了我的代码,

fragment_map.xml








MapsFragment.java

器物 onMapReadyCallback

public class MapsFragment extends SupportMapFragment implements OnMapReadyCallback

onResume回调中

@Override
public void onResume() {
    super.onResume();
    ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
}

这总是给我null,我也尝试过,

((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);

这也回归了 NullPointerException

MapsActivity.java

getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, MapsFragment.newInstance()).commit();

我在onCreateActivity回调方法中添加了这个.

我无法弄清楚为什么我还在这里NullPointerException!

有时我得到 Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference

帮助将不胜感激!

更新:仍然没有修复我收到以下错误.我查看了日志,但不知道为什么会发生这种情况.

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

Arnold Balli.. 15

我终于通过观察SO中给出的答案为自己解决了这个问题.我比较了代码和答案中的代码.在我看来,这个API存在一些混乱,Google的实施非常广泛.我反复抛出这个异常:

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

我仍然不知道在SO问题中的某些实现是否有相同的异常,但这对我有用,并且可能对其他人有效.

这些是你需要检查的东西:

    确保你有这两个(我只有api关键元数据)

        
        
    

    你有一个像这样的xml片段,class属性是正确的,如下所示

       
    

在我的例子中,地图片段是一个孩子,在另一个片段中.

这个父片段显然不应该是MapFragment或SupportMapFragment.将它从SupportMapFragment更改为Fragment后,地图显示完美.

public class ParentFragment extends Fragment {

我把其他所有内容都保留在原来的状态,但不是在onCreateView中获取地图,而是在onViewCreated中得到它,如下所示:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.rewards_google_map_area);
    if (mapFragment != null) {
        LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        if (locationManager != null && mapFragment.getMap() != null) {
            googleMap=mapFragment.getMap();
            //after this you do whatever you want with the map
        }
    }

}

我没有改变任何其他东西,我没有弄乱rootView或parentView.正如你在@Konstantin Loginov的回答中看到的那样

尝试一下,让我知道.



1> Arnold Balli..:

我终于通过观察SO中给出的答案为自己解决了这个问题.我比较了代码和答案中的代码.在我看来,这个API存在一些混乱,Google的实施非常广泛.我反复抛出这个异常:

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

我仍然不知道在SO问题中的某些实现是否有相同的异常,但这对我有用,并且可能对其他人有效.

这些是你需要检查的东西:

    确保你有这两个(我只有api关键元数据)

        
        
    

    你有一个像这样的xml片段,class属性是正确的,如下所示

       
    

在我的例子中,地图片段是一个孩子,在另一个片段中.

这个父片段显然不应该是MapFragment或SupportMapFragment.将它从SupportMapFragment更改为Fragment后,地图显示完美.

public class ParentFragment extends Fragment {

我把其他所有内容都保留在原来的状态,但不是在onCreateView中获取地图,而是在onViewCreated中得到它,如下所示:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.rewards_google_map_area);
    if (mapFragment != null) {
        LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        if (locationManager != null && mapFragment.getMap() != null) {
            googleMap=mapFragment.getMap();
            //after this you do whatever you want with the map
        }
    }

}

我没有改变任何其他东西,我没有弄乱rootView或parentView.正如你在@Konstantin Loginov的回答中看到的那样

尝试一下,让我知道.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有