在onDataChange方法Android Firebase数据库中工作

在onDataChange方法Android Firebase数据库中工作,android,google-maps,firebase,firebase-realtime-database,Android,Google Maps,Firebase,Firebase Realtime Database,我试图从Firebase数据库中读取数据,然后用这些项目创建一个数组,并从该数组列表中创建一个带有标记的地图 但当我尝试运行该活动时,会出现以下异常: 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.

我试图从Firebase数据库中读取数据,然后用这些项目创建一个数组,并从该数组列表中创建一个带有标记的地图

但当我尝试运行该活动时,会出现以下异常:

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));
}
mlLocationDatabaseReference.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot dsp:DataSnapshot.getChildren()){
LocationCurrent post=dsp.getValue(LocationCurrent.class);
Double latitude=Double.parseDouble(post.getLatitude());
Double longitude=Double.parseDouble(post.getLongitude());
currentLocationLatLng=新LatLng(纬度、经度);
latlngs.add(当前位置LATLNG);
//日志工作正常我看到了latlngs数组的所有项
Log.i(“LAT LONGS IN”,String.valueOf(latlngs));
//这里也有同样的例外点
对于(int i=0;i
在我看来,我应该在onDataChange方法中处理数据,但是映射对象并没有在那里创建,正如您从异常中看到的那样。
不允许在onDataChange内移动onMapReady。那么,有人知道如何在onDataChange方法中创建映射对象并用标记填充它吗?

似乎
nMap
未正确初始化,为空。您发布的
onMapReady()
方法为空。当映射准备好使用时,将调用该方法。它应该包含一条语句来捕获映射对象。在映射准备就绪之前,也不能添加侦听器。您可以将其移动到相同的方法中,如下所示:

@Override
public void onMapReady(GoogleMap googleMap) {
    nMap = googleMap;
    mLocationDatabaseReference.addListenerForSingleValueEvent(...);
}