我有一个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()中的对象并获取空指针异常。有没有办法来解决这个问题?谢谢。
答案 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)
当然,如果你有类属性
,则SupportMapFragment
和MapFragment
意味着不匹配
class ="com.google.android.gms.maps.MapFragment"
在您的XML
中,您应该使用
MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map);
或强>
如果您有课程类似
class="com.google.android.gms.maps.SupportMapFragment"
那么你可以像你一样做。