Нет необходимости создавать вызов базы данных, чтобы иметь возможность получить адрес электронной почты пользователя, вы можете просто получить адрес электронной почты непосредственно из объекта FirebaseUser
, например:
String email = FirebaseAuth.getInstance().getCurrentUser().getEmail();
В соответствии со схемой вашей базы данных, обратите внимание, что вы не можете сделать запрос к своей базе данных, когда у вас есть два узла с динамически (выдвигаемыми) именами.В Firebase также нет подстановочных знаков.Чтобы решить эту проблему, вы должны уменьшить количество дочерних элементов, добавив идентификатор проекта в качестве свойства вашего объекта задачи.Теперь, чтобы получить все задачи, которые соответствуют определенному адресу электронной почты, используйте следующий запрос:
reference = FirebaseDatabase.getInstance().getReference().child("tasks");
Query firstQuery = reference.orderByChild("owner_one").equalsTo("x@gmail.com");
Это работает только с одним свойством.К сожалению, вы не можете выполнять запросы в базе данных реального времени Firebase, используя несколько предложений «WHERE» (в терминах SQL).Что вы можете сделать, это сделать запрос в базу данных три раза, по одному для каждого свойства владельца.Второй и третий запросы должны выглядеть следующим образом:
Query secondQuery = reference.orderByChild("owner_two").equalsTo("x@gmail.com");
Query thirdQuery = reference.orderByChild("owner_three").equalsTo("x@gmail.com");
Обратите внимание, что для получения желаемого результата вы должны использовать вложенные запросы, которые могут выглядеть следующим образом:
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
if(dataSnapshot.exists()) {
//Perform the second query and then the third query
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
};
firstQuery.addChildEventListener(childEventListener);
Однако это проще сделать в Cloud Firestore , где вы можете добавить свойство типа array
и использовать метод whereArrayContains () , подобный этому:
tasksRef.whereArrayContains("owners", "x@gmail.com");