从 Firebase 检索 Lat 日志数据并将其作为标记放在地图上

Retrieving Lat Log data from Firebase and put on Map as marker

我遇到了这个与从我的 firebase 数据库中检索数据相关的问题。我已使用以下 android 代码将以下详细信息推送到我的数据库中。

                scanString = intent.getStringArrayListExtra( "beaconList" );
            nameList = intent.getStringArrayListExtra( "nameList" );
            addressList = intent.getStringArrayListExtra( "addressList" );
            RssiList = intent.getIntegerArrayListExtra( "RssiList" );

            for ( int i=0; i < scanString.size(); i++) {
                addBeacon.name = nameList.get( i );
                addBeacon.address = addressList.get( i );
                addBeacon.Rssi = RssiList.get( i );
                addBeacon.latitude = mLastKnownLocation.getLatitude();
                addBeacon.longitude = mLastKnownLocation.getLongitude();
                databaseReference.child( "foo" ).push().setValue( addBeacon);

我得到了以下数据库结构。

现在我想从数据库中获取这个纬度和经度值,并用这些坐标在地图上放置标记。

我正在为此使用以下代码。

   scanString.add("11");
        databaseReference = FirebaseDatabase.getInstance().getReference().child( "foo" ).child( "-KltK9gp7g5h1YpqaCmW" );

        //databaseReference.addValueEventListener( new ValueEventListener() {
        //databaseReference.addChildEventListener( new ChildEventListener() {

        ChildEventListener childEventListener = new ChildEventListener() {


            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
                Log.d("Child Event,longitude", dataSnapshot.getKey());
                addBeacon = dataSnapshot.getValue( beacon.class );
                scanString.add("add beacon retrieved");
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
                Log.d("Child Event,longitude","onChildChanged:"+ dataSnapshot.getKey());
                addBeacon = dataSnapshot.getValue( beacon.class );
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {                }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {                }
            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        databaseReference.addChildEventListener(childEventListener);
       databaseReference.push().setValue( scanString);
    }

如果有人能提供帮助,那就太好了。提前致谢!!

要在地图上放置标记,您首先需要一张地图及其参考(例如GoogleMap mMap

如果您有这样的参考,您需要做的就是将坐标转换为 LatLng 实例并添加标记:

LatLng coord = new LatLng(addBeacon.latitude, addBeacon.longitude);
map.addMarker(new MarkerOptions()
    .position(coord)
    .title("Hello world"));

您可以获得更多关于标记的信息here:

附带说明一下,如果您在从 Firebase 检索数据时遇到问题并且只想检索一次数据(不是在发生更改时,而是 ChildEventListener 所做的,等待更改发生), 你可以使用 ListenerForSingleValueEvent:

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            beacon addBeacon = dataSnapshot.getValue( beacon.class );
            LatLng coord = new LatLng(addBeacon.latitude, addBeacon.longitude);
            marker = map.addMarker(new MarkerOptions()
                .position(coord)
                .title("Hello world"));     
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });