【问题标题】:Working inside onDataChange method Android Firebase Database在 onDataChange 方法 Android Firebase 数据库中工作
【发布时间】:2017-01-16 23:05:32
【问题描述】:

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

但是当我尝试运行 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

这是我的代码。请阅读 cmets 以获得更好的理解。

       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 方法中处理数据,但从异常中可以看出,map Object 并没有在那里创建。 不允许在 onDataChange 内移动 onMapReady。那么有人知道如何创建地图对象并在 onDataChange 方法中使用标记填充它吗?

【问题讨论】:

    标签: android google-maps firebase firebase-realtime-database


    【解决方案1】:

    nMap 似乎没有正确初始化并且为空。您发布的 onMapReady() 方法为空。当地图可以使用时调用该方法。它应该包含一个捕获地图对象的语句。在地图准备好之前,您也不得添加侦听器。你可以在同一个方法中移动它,像这样:

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

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多