如果位置节点存在,我想从节点位置检索数据。如果它存在,我希望它读取纬度和经度值并更改地图上标记的位置。此步骤必须每5秒重复一次。 现在,它只检索一次数据。我希望它只在位置节点可用时继续重复
这是当前的代码
busReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
usercount = ds.getChildrenCount();
for(int i = 1; i <= usercount; i++){
if(ds.hasChild(userid)){
busno = ds.getKey();
driverReference = mDatabaseReference.child("Busno").child(busno);
driverReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds1 : dataSnapshot.getChildren()) {
if(ds1.hasChild("location")) {
driverid = ds1.getKey();
locationReference = mDatabaseReference.child("Busno").child(busno).child(driverid).child("location");
locationReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String lat1 = dataSnapshot.child("latitude").getValue().toString();
latitude = Double.valueOf(lat1);
String lon1 = dataSnapshot.child("longitude").getValue().toString();
longitude = Double.valueOf(lon1);
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sydney).title("Current Location"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
mMap.animateCamera(CameraUpdateFactory.zoomTo(17));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
break;
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
要检查节点是否存在,您可以使用以下
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.exists()//returns true if node exists
}
@Override public void onCancelled(DatabaseError databaseError) {
emitter.onError(databaseError.toException());
}
现在,如果节点存在而不是使用addListenerForSingleValueEvent()
使用addValueEventListener()
,那么每当特定节点的值发生变化时,这将给你一个回调。