Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 API设置MapType时出现空指针异常_Java_Android_Google Maps_Android Fragments_Nullpointerexception - Fatal编程技术网

Java 使用Android Google Maps API设置MapType时出现空指针异常

Java 使用Android Google Maps API设置MapType时出现空指针异常,java,android,google-maps,android-fragments,nullpointerexception,Java,Android,Google Maps,Android Fragments,Nullpointerexception,在提交MapFragment并使用getMap()获取对其映射的引用后,尝试设置映射类型时,我遇到空指针异常 我认为错误的原因是片段尚未初始化,因此无法设置映射类型 我怎么知道这个片段何时被初始化,我被允许调用它的公共方法?在我的MainActivity中是否有一个接口可以实现,以了解片段何时加载 此外,如果mmapframent尚未初始化,为什么允许我调用getMap()?实际上只是GoogleMap对象没有正确初始化吗 这是我的密码: public class MainActivity ex

在提交
MapFragment
并使用
getMap()
获取对其映射的引用后,尝试设置映射类型时,我遇到空指针异常

我认为错误的原因是片段尚未初始化,因此无法设置映射类型

我怎么知道这个片段何时被初始化,我被允许调用它的公共方法?在我的
MainActivity
中是否有一个接口可以实现,以了解片段何时加载

此外,如果
mmapframent
尚未初始化,为什么允许我调用
getMap()
?实际上只是
GoogleMap
对象没有正确初始化吗

这是我的密码:

public class MainActivity extends Activity {

    private static final String LOG_TAG = MainActivity.class.getSimpleName();
    private FragmentManager fm;
    private MapFragment mMapFragment;
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_container);

        fm = getFragmentManager();
        mMapFragment = MapFragment.newInstance();

        fm.beginTransaction().add(R.id.fragment_container, mMapFragment).commit();
        mGoogleMap = mMapFragment.getMap();

        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
    }
}
以及
主容器的XML

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

</FrameLayout>
我怎么知道这个片段何时被初始化,我被允许调用它的公共方法

在映射片段的生命周期方法之一中配置映射片段,如
onActivityCreated()

或者,不要使用
片段事务
,而是在布局中使用
标记

我怎么知道这个片段何时被初始化,我被允许调用它的公共方法

在映射片段的生命周期方法之一中配置映射片段,如
onActivityCreated()


或者,在布局中使用
标记,而不是使用
片段事务处理。

MapFragment
通过code创建的
GoogleMap
在以下情况下准备就绪:

  • onCreateView
    已返回
  • 已安装Google Play Services应用程序,且版本正确
  • 如果您想在
    活动
    中获得非空的
    谷歌地图
    ,请在
    onResume
    中执行:

    if (mGoogleMap == null) {
        mGoogleMap = mMapFragment.getMap();
        if (mGoogleMap != null) {
            initMap();
        }
    }
    

    双ifs确保每个
    活动
    实例只调用一次
    initMap
    ,并且仅在
    GoogleMap
    就绪时调用。这是一种正确的处理方式,因为在用户安装Google Play服务并返回到您的应用程序后,
    GoogleMap
    可以准备就绪(
    onResume
    第二次调用)。

    MapFragment
    通过代码创建的
    GoogleMap
    在以下情况下准备就绪:

  • onCreateView
    已返回
  • 已安装Google Play Services应用程序,且版本正确
  • 如果您想在
    活动
    中获得非空的
    谷歌地图
    ,请在
    onResume
    中执行:

    if (mGoogleMap == null) {
        mGoogleMap = mMapFragment.getMap();
        if (mGoogleMap != null) {
            initMap();
        }
    }
    
    双ifs确保每个
    活动
    实例只调用一次
    initMap
    ,并且仅在
    GoogleMap
    就绪时调用。这是一种正确的处理方式,因为在用户安装Google Play服务并返回到您的应用程序后(
    onResume
    第二次调用),可以准备好
    GoogleMap