从 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) {
}
});
我遇到了这个与从我的 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) {
}
});