В ответе Питера подчеркивается одна проблема, но в вашем коде есть еще одна проблема.
При выполнении запроса к базе данных Firebase потенциально может быть несколько результатов.Таким образом, снимок содержит список этих результатов.Даже если есть только один результат, снимок будет содержать список из одного результата.
Таким образом, код в вашем onDataChange
должен обрабатывать это потенциально множественное потомство, выполняя цикл по dataSnapshot.getChildren()
:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
String staffType = userSnapshot.getKey();
if (staffType.equals("servers")){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
}
Хотя проверка может работать с этими изменениями, она никогда не будетэффективный в масштабе, так как вам нужно просмотреть слишком много данных, чтобы найти нужного пользователя.Ваша текущая структура данных позволяет вам эффективно искать всех пользователей для данной роли.Это не позволяет эффективно искать роль для конкретного пользователя.Для этого вы должны добавить дополнительную структуру данных с именно этой информацией: роль для каждого UID.Так что-то вроде:
user-roles
"22yXY813cW...": "server"
"uid2": "cook"
С помощью этой дополнительной структуры вы можете эффективно искать роль для пользователя без запроса:
mDatabase.child("user-roles").child(mAuth.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String staffType = dataSnapshot.getKey();
if (staffType.equals("servers")){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
}