我正在尝试从Firebase数据库中读取数据,然后从这些项目中创建一个数组,并使用该数组列表中的标记创建一个Map。
但是当我尝试运行Activity时,我得到了这个例外:
java.lang.NullPointerException: Attempt to invoke virtual method
'com.google.android.gms.maps.model.Marker
com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)'
on a null object reference
这是我的代码。请阅读评论以便更好地理解。
mLocationDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
LocationCurrent post = dsp.getValue(LocationCurrent.class);
Double latitude = Double.parseDouble(post.getLatitude());
Double longitude = Double.parseDouble(post.getLongitude());
currentLocationLatLng = new LatLng(latitude, longitude);
latlngs.add(currentLocationLatLng);
//Logging works fine I see all items of the latlngs array
Log.i("LAT LONGS IN", String.valueOf(latlngs));
//Same Exception points here
for(int i = 0 ; i < latlngs.size() ; i++ ) {
createMarker(latlngs.get(i));
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
//Exception points here too
protected Marker createMarker(LatLng latlngmthd) {
return mMap.addMarker(new MarkerOptions()
.position(latlngmthd)
.anchor(0.5f, 0.5f));
}
在我看来,我应该使用onDataChange方法中的数据,但是从异常中可以看到,不会在那里创建地图对象。 不允许在onDataChange中移动onMapReady。那么有谁知道如何建议一个地图对象并用onDataChange方法中的标记填充它?
答案 0 :(得分:0)
nMap
似乎尚未正确初始化且为空。您发布的onMapReady()
方法为空。在准备好使用地图时调用该方法。它应该包含一个捕获地图对象的语句。在映射准备好之前,您还必须不添加侦听器。你可以在同一个方法中移动它,如下所示:
@Override
public void onMapReady(GoogleMap googleMap) {
nMap = googleMap;
mLocationDatabaseReference.addListenerForSingleValueEvent(...);
}