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
)