Android无法找到符号方法getMap()

时间:2016-07-17 03:19:46

标签: java android google-maps supportmapfragment

我有一个gps应用程序在我的手机上正常工作。但是,我看到有人在制作中有空指针异常。

    SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

    // Getting GoogleMap object from the fragment
    googleMap = fm.getMap();

    // Enabling MyLocation Layer of Google Map
    googleMap.setMyLocationEnabled(true);

    googleMap.setPadding(0, 0, 0, 90);

我从制作中得到的错误是 引起:

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

所以我做了一些研究,发现getMap方法已被删除,人们建议使用getMapAsync(this);

@Override
public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;    //which doesn't seem to work
}

但是,我在许多不同的方法中引用googleMap变量,我无法将所有代码移动到onMapReady方法。我尝试在this.googleMap = googleMap方法中使用onMapReady,但每当我尝试引用googleMap变量时,我仍然会收到空指针异常。我在onCreated()中定义了getMapAsync(this),然后尝试访问' googleMap' onResume()中的对象并获取空指针异常。有没有办法来解决这个问题?谢谢。

5 个答案:

答案 0 :(得分:7)

您正在获取空指针异常,因为您尝试使用谷歌地图对象但谷歌地图对象仍为空,因此您需要按照此步骤操作。 在onCreate()方法中编写此代码

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

现在使用public class Demo implements OnMapReadyCallback实现您的课程,您需要覆盖onMapReady(Googlemap googleMap)。 你可以在onMapReady()回调后执行所有操作。

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 // Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
    }

答案 1 :(得分:4)

正如我在this答案中建议的那样。

getMap()已被弃用,而不是以下列方式使用getMapAsync()

替换此

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();

用这个

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMapAsync(this);

有关详细信息,请访问此link

答案 2 :(得分:2)

您可以使用getMapAsync(this)方法。 Please check this link for more

答案 3 :(得分:1)

替换

googleMap = ((SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.googleMap)).getMap();

googleMap = ((SupportMapFragment) getChildFragmentManager()
    .findFragmentById(R.id.map)).getMapAsync((OnMapReadyCallback);this);

答案 4 :(得分:0)

当然,如果你有类属性

,则SupportMapFragmentMapFragment意味着不匹配
class ="com.google.android.gms.maps.MapFragment"

在您的XML中,您应该使用

MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map);

如果您有课程类似

class="com.google.android.gms.maps.SupportMapFragment"

那么你可以像你一样做。