Google地图返回null

时间:2015-07-07 19:34:29

标签: android google-maps

我有Google地图活动。突然它正在关闭,因为getMap()(java null指针exeption)似乎不起作用。我重新安装了一些工作正常的旧apks,但这些都关闭了。所以它必须是设备上的东西左右,可能是什么原因?

private GoogleMap googleMap;   
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
try {
        if(googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        }

这是xml文件

<RelativeLayout 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=".MainActivity">

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

logcat的:

java.lang.RuntimeException: Unable to start activity ComponentInfo{de.mareike.cityexplorer/de.mareike.cityexplorer.MainActivity}: java.lang.NullPointerException
 Caused by: java.lang.NullPointerException
        at com.google.l.a.ce.a(Unknown Source)
        at com.google.maps.api.android.lib6.d.eg.<init>(Unknown Source)
        at com.google.maps.api.android.lib6.d.ef.a(Unknown Source)
        at com.google.maps.api.android.lib6.d.aq.<init>(Unknown Source)
        at com.google.maps.api.android.lib6.d.ft.a(Unknown Source)
        at com.google.android.gms.maps.internal.l.onTransact(SourceFile:167)
        at android.os.Binder.transact(Binder.java:380)
        at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source)
        at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
        at de.mareike.cityexplorer.MainActivity.onCreate(MainActivity.java:88)

2 个答案:

答案 0 :(得分:1)

根据heregetMap()方法已弃用,您需要使用getMapAsync(OnMapReadyCallback)

示例代码:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        // Add a marker in Sydney, Australia, and move the camera.
        LatLng sydney = new LatLng(-34, 151);
        map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10));

    }
}

activity_main.xml

<fragment 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"
          android:id="@+id/map"
          tools:context=".MapsActivity"
          android:name="com.google.android.gms.maps.SupportMapFragment"/>

有关详细信息,请参阅官方文档here

答案 1 :(得分:0)

检查您的布局activity_main是否应包含ID 地图

的片段
 <fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />