我遇到了与从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);
}
如果有人可以提供帮助,那真的很棒。在此先感谢!!
答案 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) {
}
});