从Firebase检索Lat Log数据并将地图标记为

时间:2017-06-11 09:57:13

标签: android firebase firebase-realtime-database latitude-longitude

我遇到了与从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);

我得到了数据库结构。

现在我想得到这个lat&amp;数据库中的长值,并使用这些坐标将标记放在地图上。

我正在使用以下代码。

   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);
    }

如果有人可以提供帮助,那真的很棒。在此先感谢!!

1 个答案:

答案 0 :(得分:0)

要在地图上放置标记,首先需要一张地图及其参考(例如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) {

        }
    });