Я создаю приложение, которое позволяет пользователям видеть определенные компании Автобусы и поезда в реальном времени.
и пока все хорошо.но я натолкнулся на препятствие.Мне действительно нужна помощь, чтобы понять эту часть Firebase.
База данных разделена следующим образом.
Моя база данных Firebase
![enter image description here](https://i.stack.imgur.com/gTVbz.jpg)
Таким образом, драйвер регистрируется и выбираетпо какому маршруту / линии он / она будет ехать.затем он перейдет к карте, на которой есть переключатель «Я работаю», при переключении «Вкл.» он отправляет местоположение драйверов пользователям и помещает UID драйверов и данные о местоположении в узел «driversAvailable».
, но проблема заключается в дублировании UID и данных драйверов в неправильной ветке.Данные драйвера RedLine должны быть в driversAvailable => drivers => RedLine
void saveGeoFire(){
final DatabaseReference yellowRef = FirebaseDatabase.getInstance().getReference().child("driversAvailable").child("drivers").child("YellowLine");
final DatabaseReference redRef = FirebaseDatabase.getInstance().getReference().child("driversAvailable").child("drivers").child("RedLine");
final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
final DatabaseReference driversRouteRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child("YellowLine");
final DatabaseReference driversRouteRedRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child("RedLine");
ValueEventListener redRefEventListenter = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
GeoFire geoFire = new GeoFire(redRef);
geoFire.setLocation(userId, new GeoLocation(mLastLocation.getLatitude(),mLastLocation.getLongitude()));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
ValueEventListener driversAvailableEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
GeoFire geoFire = new GeoFire(yellowRef);
geoFire.setLocation(userId, new GeoLocation(mLastLocation.getLatitude(),mLastLocation.getLongitude()));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
driversRouteRef.addListenerForSingleValueEvent(driversAvailableEventListener);
driversRouteRedRef.addListenerForSingleValueEvent(redRefEventListenter);
}